我跟着How can I find an element by CSS class with XPath?,它提供了用于按类名选择元素的选择器。问题是,当我使用它时,它会检索一个空结果“[]”,事实上我知道在url中有一个div分类“zoomWindow”,它被输入到scrapy shell中。
我的尝试:
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的尝试也有相同的结果。
我不知道还有什么可以尝试,你能看到选择器中有任何拼写错误吗?
答案 0 :(得分:4)
如果要检查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']