gpt4 book ai didi

python - 将从浏览器获取的 XPath 转换为 Scrapy 可用的 XPath

转载 作者:行者123 更新时间:2023-11-30 23:13:38 24 4
gpt4 key购买 nike

这是我在使用浏览器获取特定 XPath 时总是遇到的问题。

假设我想从 Google 图片搜索或 Pinterest 等网站中提取所有图像。当我使用 Inspect element 然后使用 copy XPath 获取图像的 XPath 时,它会给出如下所示的内容:

//*[@id="rg_s"]/div[13]/a/img

这是我从 Google 搜索的图片中得到的。当我想在我的 spider 中使用它时,我使用了 SelectorHtmlXPathSelector 以及以下 XPath,但它们都不起作用!

//*[@id="rg_s"]/div/a/img
//div[@id="rg_s"]/div[13]/a/img
//[@class="rg_di rg_el"]/a/img #i change this based on the raw html of page
#hxs.select(xpath).extract()
#Selector(response).xpath('xpath')
.
.

我读过很多问题,但我找不到关于如何在 Scrapy 中使用从网络浏览器获取的 XPath 的一般答案。

最佳答案

通常盲目遵循浏览器关于如何定位元素的建议是不安全和可靠的。

首先,开发工具生成的 XPath 表达式通常是绝对的 - 从所有父级的父级开始 - html 标记,这使得它更加依赖于页面结构(嗯,firebug 还可以根据 id 属性创建表达式)。

此外,由于网站页面加载的异步特性以及在浏览器中动态执行的 JavaScript,您在浏览器中看到的 HTML 代码可能与 Scrapy 接收到的代码有很大不同。 Scrapy 不是浏览器,只能“看到”页面的初始 HTML 代码,位于“动态”部分之前。

相反,检查 Scrapy 响应中真正包含的内容:打开 Scrapy Shell ,检查响应并调试您的 XPath 表达式和 CSS 选择器:

$ scrapy shell https://google.com
>>> response.xpath('//div[@id="myid"]')
...
<小时/>

这是我对谷歌图像搜索的了解:

$ scrapy shell "https://www.google.com/search?q=test&tbm=isch&qscrl=1"
In [1]: response.xpath('//*[@id="ires"]//img/@src').extract()
Out[1]:
[u'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRO9ZkSuDqt0-CRhLrWhHAyeyt41Z5I8WhOhTkGCvjiHmRiTSvDBfHKYjx_',
u'https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQpwyzbW_qsRenDw3d4wwpwwm8n99ukMtLCVaPiTJxyviyQVBQeRCglVaY',
u'https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSrxtoY3-3QHwhjc5Ofx8090uDYI8VOUbi3gUrd9USxZ-Vb1D5pAbOzJLMS',
u'https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTQO1A3dDJ07tIaFMHlXNOsOnpiY_srvHKJE1xOpsMZscjL3aKGxaGLOgru',
u'https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQ71ukeTGCPLuClWd6MetTtQ0-0mwzo3rn1ug0MUnbpXmKnwNuuBnSWXHU',
u'https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRZmWrYR9A4W97jpjhtIbyUM5Lj3vRL0vgCKG_xfylc5wKFAk6UB8jiiKA',
...
u'https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRj08jK8sBjX90Tu1RO4BfZkKe5A59U0g1TpMWPFZlNnA70SQ5i5DMJkvV0']

关于python - 将从浏览器获取的 XPath 转换为 Scrapy 可用的 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29220031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com