【问题标题】:How to extract reviewer's ratings from Yelp.如何从 Yelp 中提取评论者的评分。
【发布时间】:2016-03-16 02:06:42
【问题描述】:

我正在自学网页抓取,我正在尝试将评论者在 Yelp 上的评分作为一种练习。通常,我可以使用 CSS 选择器或 XPath 方法来选择我感兴趣的内容。但是,这些方法不适用于选择审阅者的评级。例如,在以下页面上:https://www.yelp.com/user_details_reviews_self?userid=0S6EI51ej5J7dgYz3-O0lA。第一个评级的 CSS 选择器是“.stars_2”。但是,如果我在我的 RSelenium 代码中使用此选择器,如下所示:

     ratings=remDr$findElements('css selector','.stars_2')

     ratings=unlist(lapply(ratings, function(x){x$getElementText()}))

我得到 NULL。我认为原因是评级实际上是一个图像。我在这里粘贴一小部分页面源代码:

            <div class="review-content">
            <div class="review-content">
            <div class="biz-rating biz-rating-very-large clearfix">
            <div>        
            <div class="rating-very-large">
            <i class="star-img stars_2" title="2.0 star rating">
          <img alt="2.0 star rating" class="offscreen" height="303" src="//s3-media4.fl.yelpcdn.com/assets/srv0/yelp_styleguide/c2252a4cd43e/assets/img/stars/stars_map.png" width="84">
    </i>
</div>


    </div>

基本上,如果我可以从 class="stat-img stars_2" 或 title="2.0 star rating" 中提取文本,那么我很好。谁可以帮我这个事?拜托,我真的很想知道。

【问题讨论】:

    标签: python selenium web-scraping r


    【解决方案1】:

    如何在页面的 html 上使用正则表达式,例如:

    >>> import requests
    >>> url = 'http://www.yelp.com/user_details_reviews_self?userid=0S6EI51ej5J7dgYz3-O0lA'
    >>> html = requests.get(url).text
    >>> import re
    >>> rating_pattern = re.compile(r'\d.\d star rating">')
    >>> for rating in re.findall(rating_pattern, html):
    ...     print(rating)
    ...
    2.0 star rating">
    4.0 star rating">
    5.0 star rating">
    5.0 star rating">
    5.0 star rating">
    5.0 star rating">
    5.0 star rating">
    2.0 star rating">
    4.0 star rating">
    2.0 star rating">
    

    【讨论】:

      【解决方案2】:

      这会满足吗?

      source = driver.page_source  # gets page source of current page
      images = source.split("<img")[1:]
      for image in images:
          if "star rating" in image:
              rating = image.split('''alt="''')[1]
              rating = rating.split("star")[0]
              rating = float(rating)
              print rating
              break
      

      【讨论】:

        猜你喜欢
        • 2017-02-04
        • 1970-01-01
        • 2022-01-10
        • 2014-09-10
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多