2016-04-16 7 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情報をチェックする正しい方法についての情報を検索しましたが、何の成功もありません。

これを行うにはどのような方法が最適ですか? soup.find_allではなく、hoteTitleをhotelInfo.find_allに設定することはできませんか?

+1

あなたの質問は不明であると同様。予想される出力を持つサンプルHTML文書を表示してください。 – styvane

+0

エラーメッセージと説明が更新されました。ここで共有できるサンプルデータはありません。 – mutantChickenHer0

答えて

3

エラーメッセージが明らかに示すとおり、listオブジェクトで呼び出すことができるfind_all()メソッドはありません。

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

だけh3の要素が必要な場合は、組み合わせることができます。この場合、あなたはdiv.hotel-wrapからいくつかの情報だけでなく、対応するh3が必要であることを仮定して、代わりにlistの個々のメンバーにfind_all()を呼び出す必要があります2つのセレクタhotelInfo最初検索することなく、それらを直接取得する:hotelinfoについて

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

を、ZIP(hotelinfos、hoteltitles)でhoteltitle: データ= { 'hotelinfo':hotelinfo.get_text()、 } 印刷(データ)

その

関連する問題