2

我已经关注了如何使用 XPath 通过 CSS 类找到元素?它提供了用于按类名选择元素的选择器。问题是当我使用它时,它会检索一个空结果“[]”,事实上我知道在提供给 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 上的尝试得到了相同的结果。

我不知道还能尝试什么,你能在选择器中看到任何拼写错误吗?

4

1 回答 1

5

如果您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']
于 2015-01-27T16:12:25.807 回答