BeautifulSoup搜索beautifulsoup结果?

时间:2016-04-16 14:30:57

标签: python beautifulsoup

搜索酒店网站以检索标题和价格。 “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吗?

2 个答案:

答案 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(), }       打印(数据)

喜欢那个