2014-05-18 57 views
-2

我正在过分复杂化这个简单的项目,但我想了解更多关于Python的知识,所以我想到了这个简单的应用程序,它涉及基于在Google展示时间上列出的电影来抓取所有当前电影的电影时间。数据抓取的正则表达式?

该位置是无关紧要的,因为它拉起所有当前的电影。我有代码取消<span class=info></span>标记中的所有数据,但它显然会提取电影的长度以及大量其他html数据。我只想要电影时代。

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

这里是长什么样的文本信息的一部分,就像

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

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

+0

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

回答

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'