使用Scrapy无法提取span类中的评分文本问题求助
提取Amazon巴西站商品评分文本问题解决
问题描述
尝试提取页面中span标签内的评分文本,已使用以下XPath表达式但遇到问题:
尝试过的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>
解决方案
你所用的XPath语法本身是正确的,无法提取内容大概率是以下原因:
- 页面动态渲染:该页面可能通过JavaScript加载评分数据,直接使用Scrapy的
response.xpath无法获取动态生成的内容。此时需要使用Splash、Playwright等工具渲染页面后再提取。 - 选择器范围过宽:页面中可能存在多个相同class或data-hook的元素,导致匹配到无关内容或无法精准定位。可以通过父容器缩小范围:
# 精准提取完整评分文本 response.xpath("//div[contains(@class,'AverageCustomerReviews')]//span[@class='a-icon-alt']/text()").get() # 提取简化版评分文本 response.xpath("//div[contains(@class,'AverageCustomerReviews')]//span[@data-hook='rating-out-of-text']/text()").get() - 爬取内容验证:先打印
response.text确认返回的HTML中是否包含目标span标签,部分网站会通过反爬机制返回空页面或不同内容,需先排查这一点。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

