数据抓取的正则表达式?

时间:2014-05-18 21:56:30

标签: python regex beautifulsoup screen-scraping

我让这个简单的项目过于复杂,但我想了解更多关于Python的知识,所以我想到了这个简单的应用程序,它涉及根据google showtimes上列出的电影刮取所有当前电影的电影时间。 / p>

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

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

以下是文本信息的哪一部分的小片段

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

我需要时间和分钟,没有别的。从这一行文本中解析这些数据的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

你可以在这里使用正则表达式,是的。当您提取标记文本时,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'