sec*_*uaz 2 xpath scrapy web-scraping scrapy-shell
我遵循了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')]")
Run Code Online (Sandbox Code Playgroud)
我查看了许多提供各种选择器的资源。就我而言,该元素只有一个类,因此我使用了使用“concat”的版本,但不起作用并被丢弃。
我在虚拟机中安装了 ubuntu 和 scrapy,只是为了确保这不是我在 Windows 上安装的错误,但我在 ubuntu 上的尝试得到了相同的结果。
我不知道还能尝试什么,你能看到选择器中的任何拼写错误吗?
如果您在 shell 中检查response.body- 您会发现它不包含以下元素class="zoomWindow":
In [3]: "zoomWindow" in response.body
Out[3]: False
Run Code Online (Sandbox Code Playgroud)
但是,如果您在浏览器中打开页面并检查 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']
Run Code Online (Sandbox Code Playgroud)