2014-05-18 58 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'