我正在使用此链接:https://www.amazon.ca/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=ssd 我想帮助检索亚马逊的产品名称。我已经尝试了无数种xpath和css方法,但无法检索这些项目的产品标题。我在网上看了一下其他人是怎么做的,但是这个链接上的html与他们的不同(抱歉,如果缩进,试着在没有适当缩进的情况下手动粘贴)。在
import scrapy
from scrapy import Spider
class SSDSpider(scrapy.Spider):
name = "SSD_spider"
start_urls = ['https://www.amazon.ca/ssd/s?ie=UTF8&page=1&rh=i%3Aaps%2Ck%3Assd','https://www.amazon.ca/s/ref=sr_pg_2? rh=i%3Aaps%2Ck%3Assd&page=2&keywords=ssd&ie=UTF8&qid=1531536732']
DOWNLOAD_DELAY = 10
def parse(self, response):
yield {
'names': response.xpath('//li[contains(@class,"a-size- base s-incline s-access-title a-text-normal")]/text()').extract(),
}
前言
好吧,首先,Amazon有API端点,我建议阅读本文的任何人都可以使用这些端点而不是刮取: https://docs.aws.amazon.com/AWSECommerceService/latest/DG/Welcome.html
为什么在html抓取上使用API端点?
按原样回答问题(通过刮擦)
截至2018年7月14日有效的XPath查询(没有承诺它明天会起作用):
//*/div/div/div/div[2]/div[1]/div[1]/a/@title
修改后的代码似乎有效。在
结果(2018年7月14日):
^{pr2}$构建/查找XPath查询的策略
许多网站(如Amazon)都要经历一个非常繁重的HTML生成过程。因此,基于智能命名的类和id创建干净的XPath查询通常是不可能的。所以我通常让另一个软件来完成这项工作。在这种情况下,chrome能够复制元素的XPath。在
在任何一个chrome网页上,右键单击你认为有你想要的数据并选择“Inspect”,然后在inspector工具中高亮显示的元素节点上,右键单击,选择“Copy”,最后选择“Copy XPath”。在
我复制了几个元素的XPath,这些元素包含我认为您要查找的数据:
然后删除了与获取单个结果id相关的查询部分,并具有以下内容:
//*/div/div/div/div[2]/div[1]/div[1]/a/h2
这将返回整个头,我假设您只需要产品的名称。看起来“title”属性确实有一个名称,所以我将其添加到XPath查询中。
//*/div/div/div/div[2]/div[1]/div[1]/a/h2/@title
相关问题 更多 >
编程相关推荐