无法使用bs4抓取数据

时间:2019-03-07 00:07:23

标签: web-scraping beautifulsoup tripadvisor

我正在尝试从Trip Advisor酒店中获取“值”数据的星级,但是我无法使用类名来获取数据: 以下是我尝试使用的代码:

cond1=df1.EmailAddress.isin(df2.Email)
cond2=df2.DateTimeCreated.ge(datetime.today() - timedelta(90))

当我尝试捕获值时,它返回一个空列表。任何方向都会很有帮助。我已经尝试了该页面中的多个类名,但是却遇到了各种字段,例如数据,评论等,但我无法获得仅服务的气泡等级。

1 个答案:

答案 0 :(得分:1)

您可以使用attribute =值选择器,并将其值作为子字符串传递给类,其中^以运算符开头,以允许构成属性值一部分的不同星形值。

或者,更简单地使用span类型选择器选择子范围。

.hotels-hotel-review-about-with-photos-Reviews__subratings--3DGjN span

在这一行:

values=soup3.select('.hotels-hotel-review-about-with-photos-Reviews__subratings--3DGjN [class^="ui_bubble_rating bubble_"]')    

从左到右阅读时,选择器的第一部分正在选择那些等级的父类。以下空间是组合以下attribute = value选择器的后代组合器,该选择器收集合格子代的列表。如前所述,您可以仅使用span替换它。

代码:

import requests
from bs4 import BeautifulSoup
import re

review_pages=requests.get("https://www.tripadvisor.com/Hotel_Review-g60745-d94367-Reviews-Harborside_Inn-Boston_Massachusetts.html")  
soup3=BeautifulSoup(review_pages.content,'lxml')   
values=soup3.select('.hotels-hotel-review-about-with-photos-Reviews__subratings--3DGjN [class^="ui_bubble_rating bubble_"]')    #.hotels-hotel-review-about-with-photos-Reviews__subratings--3DGjN span
Value_1 = values[-1]
print(Value_1['class'][1])
stars = re.search(r'\d', Value_1['class'][1]).group(0)
print(stars)

尽管我使用re,但我认为这太过分了,您可以简单地使用replace。