【问题标题】:Scrapy shell gives an output of empty list even if the xpath is correct in chrome.Why?即使 xpath 在 chrome 中正确,Scrapy shell 也会输出空列表。为什么?
【发布时间】:2023-03-27 14:25:01
【问题描述】:

在 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']/div[@class='c2prKC']/div/div/div/div[@class='c16H9d']/a/text()").getall()

##注意##

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

【问题讨论】:

    标签: scrapy scrapy-shell


    【解决方案1】:

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

    几个建议

    1. 尝试重新设计 HTTP 请求。那就是 javascript 调用 HTTP 请求,因此如果你能模仿请求,你就能得到你想要的数据。您将需要使用 chrome 开发工具或类似工具来查看请求是如何发出的。这是获取数据的最简洁明了的方式。所有其他选项都会减慢蜘蛛的速度并且更脆弱。

    2. Scrapy-splash - 这会预渲染页面的 DOM 并允许您访问所需的 HTML。

    3. Scrapy-selenium - 一个使用 selenium 处理请求的下载器中间件。没有 selenium 包的全部功能,但可以渲染 DOM,你可以得到你需要的数据。

    4. 将硒嵌入到爬虫蜘蛛中。这是最糟糕的选择,真的应该只作为最后的手段使用。

    请参阅有关动态内容的文档以获取更多详细信息here

    【讨论】:

    • 谢谢先生,但我只是个菜鸟,我已经厌倦了在 chrome 中使用开发人员工具并尝试找到数据源,但我无法做到。大佬能帮忙吗??我正在尝试遵循建议号 1。
    • 所以看过网站后,第一个选项是不可能的。没有任何结构化数据具有您想要的信息。我建议您开始考虑其他选项。它不是编码服务,因此我希望您尝试通过您看到的选项创建一些东西,或者请参阅 Scrapy 文档以了解您认为我可能错过的任何内容。
    猜你喜欢
    • 2021-11-24
    • 2015-06-25
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2015-05-30
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多