即使xpath在chrome中是正确的,Scrapy shell也会输出空列表。为什么?

即使xpath在chrome中是正确的,Scrapy shell也会输出空列表。为什么?,scrapy,scrapy-shell,Scrapy,Scrapy Shell,在粗糙的外壳上执行 url = "https://www.daraz.com.np/smartphones/?spm=a2a0e.11779170.cate_1.1.287d2d2b2cP9ar" fetch(url) r = scrapy.Request(url = url) fetch(r) response.xpath("//div[@class='ant-col-20 ant-col-push-4 c1z9Ut']/div[@class='c1_t2i']/

在粗糙的外壳上执行

url = "https://www.daraz.com.np/smartphones/?spm=a2a0e.11779170.cate_1.1.287d2d2b2cP9ar"
fetch(url)
r = scrapy.Request(url = url)
fetch(r)
response.xpath("//div[@class='ant-col-20 ant-col-push-4 c1z9Ut']/div[@class='c1_t2i']/div[@class='c2prKC']/div/div/div/div[@class='c16H9d']/a/text()").getall()
##注##

xpath中没有
tbody
标记
为什么它在scrapy中输出一个空列表,而在chrome中却有40个文本?

这是因为该网站非常面向javascript。这意味着网站上的内容是动态加载的。它在页面加载时调用HTTP请求,并且没有硬编码到HTML中。因此,当您使用ScrapyShell时,它不会加载HTML

几点建议

  • 尝试重新设计HTTP请求。也就是说,javascript可以处理HTTP请求,因此,如果您可以模拟这些请求,就可以获得所需的数据。您需要使用chrome开发工具或类似工具来查看请求是如何发出的。这是获取数据最简洁的方法。所有其他选项都会减慢卡盘的速度,使其更加脆弱

  • Scrapy splash-这会预呈现页面的DOM,并允许您访问所需的HTML

  • Scrapy selenium—一种使用selenium处理请求的下载中间件。没有获得selenium包的全部功能,但可以呈现DOM,并且可以获得所需的数据

  • 将硒嵌入刮痧蜘蛛中。这是最糟糕的选择,真的应该只作为最后的手段


  • 请查看动态内容上的文档,了解更多详细信息

    谢谢,先生,但我只是个闲人,我已经厌倦了使用chrome中的开发者工具,尝试查找数据源,但我无法做到这一点。先生,你能帮忙吗??我试着按照第一条建议去做。所以在浏览了网站之后,第一条建议是不可能的。没有任何结构化数据包含您想要的信息。我建议你开始考虑其他的选择。这不是一个编码服务,因此我希望您尝试创建一些东西,或者通过您看到的选项,或者请查看您认为我可能错过的任何东西的剪贴文档。