我已关注How can I find an element by CSS class with XPath?它提供了用于按类名选择元素的选择器。问题是,当我使用它时,它会检索到一个空结果“[]”,而且我实际上知道在馈送到 scrapy shell 的 url 中有一个名为“zoomWindow”的 div。
我的尝试:
scrapy shell "http://www.niceicdirect.com/epages/NICShop.sf/secAlIVFGjzzf2/?ObjectPath=/Shops/NICShop/Products/5696"
response.xpath("//*[contains(@class, 'zoomWindow')]")
我查看了许多提供各种选择器的资源。就我而言,该元素只有一个类,因此我使用了使用“concat”的版本,但不起作用并被丢弃。
我在虚拟机中安装了 ubuntu 和 scrapy,只是为了确保这不是我在 Windows 上安装时的错误,但我在 ubuntu 上的尝试得到了相同的结果。
我不知道还能尝试什么,你能看到选择器中的任何拼写错误吗?
最佳答案
如果您在 shell 中检查 response.body
- 您会发现它不包含 class="zoomWindow"
的元素:
In [3]: "zoomWindow" in response.body
Out[3]: False
但是,如果您在浏览器中打开页面并检查 HTML 源代码,您会看到该元素就在那里。这意味着页面加载涉及 JavaScript 逻辑或额外的 AJAX 请求。 Scrapy 不是浏览器,也没有内置的 javascript 引擎。换句话说,它只下载页面的初始 HTML 代码,而不额外下载 js 和 css 文件并“执行”它们。
对于初学者,您可以尝试使用 scrapyjs
下载处理程序和中间件。
要提取的图像也可以在 img
标记中使用 id="PreviewImage"
获取:
In [4]: response.xpath("//img[@id='PreviewImage']/@src").extract()
Out[4]: [u'/WebRoot/NICEIC/Shops/NICShop/547F/0D9A/F434/5E4C/0759/0A0A/124C/58F7/5708.png']
关于xpath - scrapy xpath 按类名选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28174557/