python - Xpath 响应总是返回 null
问题描述
我正在尝试学习 Scrapy:这是我用来在这个包上抓取价格信息的 url。“ 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(),}
返回值始终为空。但是,当我通过开发工具运行它时,它告诉我字符串应该匹配
我试过的其他字符串:
"//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
以及其他一些在开发工具中工作但在使用scrapy运行时总是返回空响应这里发生了什么?我已经尝试使用匹配字符串变得非常具体和通用,但似乎没有任何效果。
解决方案
你不能总是信任 devtools 中的“检查元素”,因为它显示了最终的 HTML,在它被 Javascript 渲染之后。一个技巧是复制价格,说“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()
希望这可以帮助。
推荐阅读
- javascript - 滑块图像已满时如何制作?反应式
- python - 关于导入 Python 的错误
- react-native - 如何在激活其他组件中的道具后重新渲染已经渲染的组件
- apache-spark - 火花工作卡住的原因可能是什么
- matlab - 编辑最小二乘线的 x 限制
- azure-application-insights - 如何更改 Live Metrics Stream 中的图表间隔
- angular - 如何使用 Angular 在本地运行 service worker
- php - 我的 php 代码不会将用户添加到 MySQL 数据库
- python - 为什么我的函数附加文件名字符串而不是文件本身的行?
- javascript - 当结果为四舍五入时(1.10 1.30)不显示小数点后二位怎么办?