2015-05-19 44 views
1

我有一個網址列表,我試圖使用正則表達式來從每個網址中取消信息。這是我的代碼(好吧,至少相關部分):使用正則表達式在美麗的湯刮

for url in sammy_urls: 
     soup = BeautifulSoup(urlopen(url).read()).find("div",{"id":"page"}) 
     addy = soup.find("p","addy").em.encode_contents() 
     extracted_entities = re.match(r'"\$(\d+)\. ([^,]+), ([\d-]+)', addy).groups() 
     price = extracted_entities[0] 
     location = extracted_entities[1] 
     phone = extracted_entities[2] 
     if soup.find("p","addy").em.a: 
      website = soup.find("p", "addy").em.a.encode_contents() 
     else: 
      website = "" 

當我拉了幾個URL的實踐正則表達式方程,所提取的實體和價格定位手機網站上來罰款,但運行當我把它放到這個更大的循環中時,會陷入困境,成爲真正的網址。

我輸錯了正則表達式嗎? (錯誤信息是'NoneType'對象沒有屬性'groups'',所以這是我的猜測......)。

我的「阿迪」似乎是我想要的東西......(打印

"$10. 2109 W. Chicago Ave., 773-772-0406, "'<a href="http://www.theoldoaktap.com/">theoldoaktap.com</a> 

"$9. 3619 North Ave., 773-772-8435, "'<a href="http://www.cemitaspuebla.com/">cemitaspuebla.com</a> and so on) 

真正體會到了幫助,所以靠近將其組合在一起!

回答

0

結合HTML/XML與正則表達式有轉壞的趨勢。

爲什麼不使用BS4找到你感興趣的股利的「a」元素,並從元素的「href」屬性的屬性。

小號ee也retrieve links from web page using python and BeautifulSoup

+0

我正在尋找更多的href(如價格,位置等),這就是爲什麼我選擇了正則表達式。我覺得很多人正在用美麗的嘴脣來使用正則表達式,不是嗎? – SpicyClubSauce

+0

這並不是一個好主意。一旦你隔離了網址,那麼你的文本可以用正則表達式解析,如果你願意的話。但是,url的結構也是如此,因此可以使用urlparse更好地解析它們(https://docs.python.org/2/library/urlparse.html)。 –

+0

不要誤解我的意思:我喜歡正則表達式的強大功能,但是結構化的數據格式可以通過專用的解析器進行更好的解析,該解析器可以瞭解結構化格式的語義。 html - > bs,url - > urlparse,...你的工具箱裏應該不僅僅是一把錘子。 –