搜索酒店网站以检索标题和价格。
“hotelInfo”是保存有趣内容的div
。
对我来说,我只想对此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”属性的list元素相关的错误。我知道这是因为hotelInfo是一个返回的列表元素。我搜索了有关检查此列表中h3
信息的正确方法的信息,但我没有取得任何成功。
最好的方法是什么? 我不应该将hoteTitle设置为hotelInfo.find_all而不仅仅是soup.find_all吗?
答案 0 :(得分:4)
正如错误消息明确指出的那样,您无法在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')
答案 1 :(得分:0)
对于hotelinfo,hoteltitle in zip(hotelinfos,hoteltitles): 数据= { &#39;酒店介绍&#39;:hotelinfo.get_text(), } 打印(数据)
喜欢那个