无法使用Scrapy从span类别撷取文字

z5btuh9x  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(164)

我在提取span类中的评级文本时遇到问题。
已尝试下列XPATH:

response.xpath("//i/span[@class='a-icon-alt']/text()").getall()
response.xpath('//span[@data-hook="rating-out-of-text"]/text()').getall()

我有以下HTML:

<div class="a-fixed-left-grid AverageCustomerReviews a-spacing-small">
  <div class="a-fixed-left-grid-inner" style="padding-left:105px">
    <div class="a-fixed-left-grid-col a-col-left" style="width:105px;margin-left:-105px;float:left;">
      <i data-hook="average-star-rating" class="a-icon a-icon-star-medium a-star-medium-4 averageStarRating">
        <span class="a-icon-alt">3,8 de 5 estrelas</span>
      </i>
    </div>
    <div class="a-fixed-left-grid-col aok-align-center a-col-right" style="padding-left:0%;float:left;">
      <div class="a-row">
        <span class="a-size-base a-nowrap">
          <span data-hook="rating-out-of-text" class="a-size-medium a-color-base">3,8 de 5</span>
        </span>
      </div>
    </div>
  </div>
</div>

如果有帮助的话,HTML是从这个页面中提取的:
https://www.amazon.com.br/Cookpad-inc/dp/B086MT7THB/ref=sr_1_12?brr=1&qid=1662666482&rd=1&s=alexa-skills&sr=1-12

6tqwzwtp

6tqwzwtp1#

我可以用这个来抓取它:span不是文本的直接父元素,因此使用//意味着它将从元素的任何从属元素中提取文本。

response.xpath('//span[@data-hook="rating-out-of-text"]//text()').getall()
更新

如果你正在使用scrapy......一个很好的方法是使用open_in_browser函数来发现scrapy的响应是否与你在浏览器中观察到的不同。
例如:

import scrapy
from scrapy.utils.response import open_in_browser

class MySpider(scrapy.Spider):
    ...
    ...
    start_urls = [...]

    def parse(self, response):
        open_in_browser(response)
        ...

相关问题