【问题标题】:Unable to scrape the data using bs4无法使用 bs4 抓取数据
【发布时间】:2019-03-07 00:07:22
【问题描述】:

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

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")

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

【问题讨论】:

    标签: web-scraping beautifulsoup tripadvisor


    【解决方案1】:

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

    或者,更简单地使用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_"]')    
    

    选择器的第一部分,当从左到右阅读时,是选择这些评级的父类。下面的空格是一个后代组合器,它结合了下面的属性 = 值选择器,它收集了一个合格子代的列表。如前所述,您可以使用 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 2021-06-07
      • 1970-01-01
      • 2017-03-21
      相关资源
      最近更新 更多