2016-04-16 93 views
0

刮飯店網站檢索標題和價格。 「hotelInfo」是div,它包含有趣的內容。BeautifulSoup搜索beautifulsoup結果?

對我來說,我只想在div上執行操作。我的代碼如下 -

from bs4 import BeautifulSoup 
import requests 

response = requests.get("http://$hotelurlhere.com") 

soup = BeautifulSoup(response.text) 
hotelInfo = soup.select('div.hotel-wrap') 
hotelTitle = soup.find_all('h3', attrs={'class': 'p-name'}) 

hotelNameList = [] 
hotelPriceList = [] 

for hotel in hotelInfo: 
    for title in hotelTitle: 
    hotelNameList.append(title.text) 

它是更有意義的說,hotelTitle應該是在hotelInfo上面的Beautifulsoup搜索。然而,當我嘗試這個

hotelTitle = hotelInfo.find_all('h3', attrs={'class': 'p-name'}) 

錯誤消息:返回

Traceback (most recent call last): 
    File "main.py", line 8, in <module> 
    hotelTitle = hotelInfo.find_all('h3', attrs={'class': 'p-name'}) 
AttributeError: 'list' object has no attribute 'find_all' 

錯誤這是涉及到列表元素沒有「find_all」的屬性。我知道這是因爲hotelInfo是返回的列表元素。我在正確的方法中搜索了信息,以檢查此列表中的h3信息,但我沒有取得任何成功。

這樣做的最好方法是什麼? 我不應該能夠將hoteTitle設置爲hotelInfo.find_all而不僅僅是soup.find_all?

+1

你的問題還不清楚。請用預期的輸出顯示示例HTML文檔。 – styvane

+0

更新錯誤消息和澄清。沒有我可以在這裏分享的樣本數據。 – mutantChickenHer0

回答

3

由於錯誤消息明確表明,沒有find_all()方法,您可以在list對象中調用該方法。在這種情況下,你應該叫find_all()list,而不是單獨的部件上,假設你需要從div.hotel-wrap的一些信息以及相應的h3

for hotel in hotelInfo: 
    hotelTitle = hotel.find_all('h3', attrs={'class': 'p-name'}) 

如果你只需要h3元素,你可以結合二個選擇器直接得到,而不必查找hotelInfo第一:

hotelTitle = soup.select('div.hotel-wrap h3.p-name') 
0

對於酒店介紹,在hoteltitle拉鍊(hotelinfos,hoteltitles): 數據= { '酒店介紹':hotelinfo.get_text(), } 打印(數據)

就像那個