【问题标题】:Regular expression for data scraping?数据抓取的正则表达式?
【发布时间】:2014-07-06 19:05:15
【问题描述】:

我把这个简单的项目过于复杂了,但我想了解更多关于 Python 的知识,所以我想到了这个简单的应用程序,它涉及根据谷歌放映时间上列出的电影来抓取所有当前电影的电影时间。

位置无关紧要,因为它会调出所有当前电影。我有代码来废弃<span class=info></span> 标签中的所有数据,但它显然会提取电影的长度以及大量其他 html 数据。我只想要电影时间。

我假设只提取电影时间,我需要某种正则表达式。

这是一个小sn-p,它是文本信息的哪一部分

<span class=info>&#8206;2hr 3min&#8206;&#8206; - Rated PG-13&#8

我只需要小时和分钟,别无其他。从这行文本中解析这些数据的最佳方法是什么?

【问题讨论】:

  • 当我说电影时间时,我只是指电影的实际长度,而不是相关的电影放映时间。

标签: python regex beautifulsoup screen-scraping


【解决方案1】:

你可以在这里使用正则表达式,是的。 BeautifulSoup 会在你提取标签文本时给你一个 unicode 值:

>>> soup = BeautifulSoup('''<span class=info>&#8206;2hr 3min&#8206;&#8206; - Rated PG-13&#8''')
>>> soup.span.get_text()
u'\u200e2hr 3min\u200e\u200e - Rated PG-13'

U+200e LEFT-TO-RIGHT MARK codepoints 可以忽略,正则表达式可以很容易地挑出时间:

import re

time_pattern = re.compile(r'(\d+)hr\s*(\d+)min')

hours, minutes = time_pattern.search(soup.span.get_text()).groups()

其中两个\d+ 组分别匹配数字后跟hrmin 文本,用空格分隔。

这会产生:

>>> time_pattern = re.compile(r'(\d+)hr\s*(\d+)min')
>>> hours, minutes = time_pattern.search(soup.span.get_text()).groups()
>>> hours
u'2'
>>> minutes
u'3'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2013-07-30
    • 2021-02-19
    • 2020-09-28
    • 2015-02-24
    • 1970-01-01
    相关资源
    最近更新 更多