首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用bs4抓取数据

无法使用bs4抓取数据
EN

Stack Overflow用户
提问于 2019-03-07 08:07:23
回答 1查看 118关注 0票数 1

我试图从Trip Advisor酒店获取"value“数据的星级,但我无法使用类名获得数据:以下是我尝试使用的代码:

代码语言:javascript
复制
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")

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

EN

回答 1

Stack Overflow用户

发布于 2019-03-07 13:12:18

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

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

代码语言:javascript
复制
.hotels-hotel-review-about-with-photos-Reviews__subratings--3DGjN span

在这一行中:

代码语言:javascript
复制
values=soup3.select('.hotels-hotel-review-about-with-photos-Reviews__subratings--3DGjN [class^="ui_bubble_rating bubble_"]')    

当从左到右阅读时,选择器的第一部分是为这些评级的父类进行选择。下面的空格是一个后代组合器,它组合了下面的attribute = value选择器,它收集了符合条件的子项的列表。如前所述,您可以只使用span来代替它。

代码:

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55034119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档