内容存在,但xpath找不到它,为什么?

时间:2016-04-22 02:29:11

标签: xpath scrapy

我正在使用" scrapy shell"测试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']") 

结果为none,但页面内容包含

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

为什么吗

1 个答案:

答案 0 :(得分:0)

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

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

有一个很好的捷径:

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

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

如果您想分享可重现的示例,了解您如何看到此页面,Chrome开发工具具有“复制为卷曲”的有用功能,可将包含所有标题和Cookie的请求复制到剪贴板。如果您将其粘贴到您的问题中,人们将能够看到您看到的页面(当然,提供的ips没有地理位置限制)。