2016-04-22 121 views
0

我正在使用“scrapy shell”来测试xpath。 它看起来像:内容存在,但xpath找不到它,为什么?

scrapy shell https://item.taobao.com/item.htm?spm=a219e.1191392.1111.1.FglWUh&id=40978681727&scm=1029.newlist-0.1.50002766&ppath=&sku=&ug=#detail 

中的XPath看起来像:

response.xpath("//a[@class='shop-name-link']") 

结果是没有,但页面内容包含

<a class="shop-name-link" href="//shop103857282.taobao.com" target="_blank" 
    data-goldlog-id="/tbwmdd.1.044">长岛小两口创业</a> 

为什么?

+0

因为它不存在。查看链接页面的来源;没有这样的“a”元素。创建一个展示问题的[mcve],并在您的问题本身的HTML中包含缩小的部分,以便您的问题可以独立运行。 – kjhughes

回答

0

如果您在寻找xpaths结果时遇到问题,请使用firepath或Chrome浏览器开发工具来调查页面源代码。请记住,Scrapy蜘蛛会将页面源视为未渲染。它不是用JavaScript呈现的。要查看蜘蛛看到的源代码,请在禁用JavaScript的浏览器中使用firepath。

我看不到在您问题中关联的页面中的类shop-name-link的链接。因此,要么不给出正确的链接,要么在某个用户操作后显示此元素,或者以不同的方式向不同国家/地区的不同用户显示此页面。也有可能这个页面依赖于你有的一些cookie的存在,但我们没有。

有很好的快捷方式:

from scrapy.utils.response import open_in_browser 
open_in_browser(response) 

这将打开在浏览器中蜘蛛的反应。当你需要检查蜘蛛究竟看到什么时使用它。在许多情况下(如果不是大多数情况下),这与您在浏览器中看到的不同。

如果你想分享你可以看到这个页面的可重复的例子,chrome开发工具有一个有用的功能“copy as curl”,可以将所有标题和cookie的请求复制到剪贴板。如果您将其粘贴到问题中,则人们将能够看到该页面(当然,ips上没有地理位置限制)。

+0

非常感谢! – Wallace

相关问题