【问题标题】:scrapy shell appears different as user interface, portion of the website is not scrapeablescrapy shell 与用户界面不同,部分网站不可抓取
【发布时间】:2019-09-13 05:52:36
【问题描述】:

问题是我无法抓取网站的一部分。如果我使用 Chrome 开发模式,我无法在 xpath 或选择器中复制正确的位置。

我会得到其他选项卡或 div 的正确路径,例如正文标题:body > div.header.home-header > div

而当我试图获取包含我想要的信息的选项卡时,我只得到:#htmlContent。如果我手动编写它应该是:body > div.main.main-top.seach-boxstyle > div > div > div.recommend-product-wrap.produc-text > div > div.recommend-product,但返回的是一个空列表。

我正在考虑是否有人引用了整个会话,这样我就无法抓取,或者这是另一个问题。网址是中文的:http://www.usewealth.com/Product/More.aspx?productDisplay=isArticle

我正在尝试帮助一家公司收集自己的推荐掉期列表,而该列表并未以任何方式出现。

【问题讨论】:

    标签: python beautifulsoup scrapy web-crawler scrapy-shell


    【解决方案1】:

    问题在于页面使用 JavaScript 动态呈现其内容。 Scrapy 本身不运行 JavaScript,它只下载页面的 HTML 源,因此不存在动态内容。在这种情况下,基本上有两种选择。使用一些无头浏览器(例如 Selenium 或 Splash)渲染页面并让 Scrapy 解析渲染结果。根据我的经验,我建议使用 Splash,因为它更可靠,并且使用 scrapy-splash 库与 Scrapy 无缝集成。

    另一种选择是使用浏览器的开发人员工具来查看页面是否不使用 API 来获取数据(然后 JavaScript 会在页面上呈现该数据)。您尝试抓取的网站似乎就是这种情况。查看 Chrome 开发人员工具(网络选项卡,然后是 XHR 请求),我看到对此 URL 的 POST 请求:

    http://www.usewealth.com/Action/ProductAJAX.ashx
    

    它返回一个 JSON 响应,其中似乎包含所有需要的数据,您可以使用标准 json 库对其进行解析。

    【讨论】:

    • 嗨,但是当我使用 post 时,我只能返回状态 200
    • 我不明白,状态200有什么问题?你能详细说明一下吗?
    • 如何请求 ashx 内部的内容,即 json 响应。还是不太明白,谢谢回复
    • 您在您的蜘蛛和方法内部定义start_requests 方法,您yield scrapy.Request 使用您从浏览器的开发工具中推断出的POST 方法和参数。有很多关于这个的问题/答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多