Xpath响应始终返回null

时间:2019-06-06 19:46:08

标签: python xpath web-scraping scrapy

我正在尝试学习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响应时会发生什么混乱?我已经尝试过使用匹配字符串来实现真正的通用性,但是似乎没有任何效果。

1 个答案:

答案 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()

希望这会有所帮助。