xpath - scrapy xpath 按类名选择元素

标签 xpath web-scraping scrapy scrapy-shell

我已关注How can I find an element by CSS class with XPath?它提供了用于按类名选择元素的选择器。问题是,当我使用它时,它会检索到一个空结果“[]”,而且我实际上知道在馈送到 scrapy shell 的 url 中有一个名为“zoomWindow”的 div。

enter image description here

我的尝试:

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/

相关文章:

python - XPath 返回空列表。为什么它忽略目标 div 元素?

java - WebDriver 中的隐式等待不会暂停执行

perl - 如果特定子节点不存在,则使用 Perl 中的 XML::LIB 提取父节点

javascript - 触发 Javascript 函数的 VBA 代码

Java HTML 解析

c# - 在 .NET 和 C# 中从网站提取数据时出现问题

python - 如何将Scrapy依赖打包为lambda?

python - 使用 scrapy 抓取特定网站时出现 "Too many requests"错误

xml - 如何用XPath获取某个条件对应的TOP N元素

xml - XPath,ID与第二个元素的链接属性和其他属性匹配的元素的返回值?