scrapy xpath select 类名元素

scrapy xpath select elements by classname

我遵循了 How can I find an element by CSS class with XPath?,它提供了用于按 classname 选择元素的选择器。问题是,当我使用它时,它检索到一个空结果“[]”,我知道事实上 url 中有一个 div classed "zoomWindow"刮擦 shell.

我的尝试:

scrapy shell "http://www.niceicdirect.com/epages/NICShop.sf/secAlIVFGjzzf2/?ObjectPath=/Shops/NICShop/Products/5696"
response.xpath("//*[contains(@class, 'zoomWindow')]")

我查看了许多提供各种选择器的资源。在我的例子中,该元素只有一个 class,所以使用 "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 文件以及 "executing" 它们。

对于初学者,您可以尝试使用 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']