我正在尝试从Trip Advisor酒店中获取“值”数据的星级,但是我无法使用类名来获取数据: 以下是我尝试使用的代码:
cond1=df1.EmailAddress.isin(df2.Email)
cond2=df2.DateTimeCreated.ge(datetime.today() - timedelta(90))
当我尝试捕获值时,它返回一个空列表。任何方向都会很有帮助。我已经尝试了该页面中的多个类名,但是却遇到了各种字段,例如数据,评论等,但我无法获得仅服务的气泡等级。
答案 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。