我试图从Trip Advisor酒店获取"value“数据的星级,但我无法使用类名获得数据:以下是我尝试使用的代码:
review_pages=requests.get("https://www.tripadvisor.com/Hotel_Review-g60745-d94367-Reviews-Harborside_Inn-Boston_Massachusetts.html")
soup3=BeautifulSoup(review_pages.text,'html.parser')
value=soup3.find_all(class_='hotels-review-list-parts-AdditionalRatings__bubbleRating--2WcwT')
Value_1=soup3.find_all(class_="hotels-review-list-parts-AdditionalRatings__ratings--3MtoD")当我尝试捕获这些值时,它返回一个空列表。任何方向都会很有帮助。我已经尝试了该页面中的多个类名称,但我得到了各种字段,如数据,评论等,但我不能获得唯一的服务气泡评级。
发布于 2019-03-07 13:12:18
您可以使用属性=值选择器,并使用^ starts with运算符将类及其值作为子字符串传递,以允许不同的星型值构成属性值的一部分。
或者,更简单地使用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。
https://stackoverflow.com/questions/55034119
复制相似问题