我正在尝试学习Scrapy: 这是我用来在此手提包上搜刮价格信息的网址。 “ https://www.net-a-porter.com/ca/en/product/1100692/chloe/roy-day-small-leather-and-suede-shoulder-bag”
还有其他一些值也返回null,但对于基本情况,我们只考虑价格
yield {
'price' : response.xpath("//nap-price[@class='product-price']/span[@itemprop='price']/text()").extract_first(),}
返回值始终为null。但是,当我通过开发工具运行它时,它告诉我字符串应该匹配
我尝试过的其他字符串:
"//nap-price[@class='product-price']/span[@class='full-price style-scope nap-price']/text()"
"//nap-price[@class='product-price']/span[2]/text()"
//nap-price[@class='product-price']/span[2]/@content
和其他一些在开发工具中工作但在运行时总是返回null响应时会发生什么混乱?我已经尝试过使用匹配字符串来实现真正的通用性,但是似乎没有任何效果。
答案 0 :(得分:1)
您不能总是信任devtools中的“ Inspect元素”,因为它显示了用Javascript渲染后的最终HTML。 一个技巧是复制价格,说“ 1850”,右键单击“查看页面源”打开页面源代码(在Firefox中,在Chrome中是类似的东西),然后在其上搜索价格以查看信息的来源是。
您会发现此标签包含有用的信息:
<meta class="product-data"
data-designer-name="Chloe"
data-designer-id="122"
data-analytics-key="Roy Day small leather and suede shoulder bag"
data-pid="1100692"
data-breadcrumb-names="Bags / Shoulder Bags / Cross Body"
data-breadcrumb-keys="Bags / Shoulder_Bags / Cross_Body"
data-breadcrumb-ids="1282 / 1335 / 6012"
data-sold-out="false"
data-price-full="185000"
data-price="185000"
/>
因此您可以编写如下的CSS选择器:
response.css('meta.product-data::attr(data-price)').extract_first()
或使用xpath:
response.xpath('//meta[@class="product-data"]/@data-price').extract_first()
希望这会有所帮助。