【问题标题】:How can I override ScraPy's Request and use python-requests instead?如何覆盖 ScraPy 的请求并改用 python-requests?
【发布时间】:2020-06-14 01:15:37
【问题描述】:

我一直在寻找开始使用ScraPy 进行大型网络抓取项目。在过去 5 年中,我一直在使用 python-requests(人类的 HTTP)和 BeautifulSoup

我想要使用 requests 库而不是 Scrapy.Request 的原因: 

  • 在玩Scrapy 时,我注意到返回的内容非常原始,因为它更等同于原始格式。而对于requests.contentrequests.text,由于requests 更优雅地处理内容编码,输出更清晰。
  • 我看到issuesScrapy.Request 没有返回与requests 库相同的内容。
  • requests 提供了方便地访问响应标头的简单方法,例如rel="next" 链接,而Scrapy.Request 没有(并且还将标头转换为大写并将格式强制转换为字节)。
  • requests 提供了一种方便的 response.json() 方法(我知道,我知道,微不足道,但仍然如此)。它已在 this issue 中进行了简要讨论,并且自 2016 年以来基本上已经腐烂。

我在 StackOverflow 上看到过类似的问题。最直接的请求是here,但它并没有受到太多关注,就像我发现的其他问题一样,我提到想要将python-requestsScraPy 一起使用,人们要么在不知不觉中假设OP 正在谈论Scrapy.Request,要么只是简单地说忽略了问题的重点,并提供了与 OP 请求等效的 Scrapy.Request

我开始研究的第一个Scrapy 方法是start_requests 覆盖Scrapy.Request

运气不好

然后我想看看是否有人创建了一个自定义 Downloader-Middleware 允许插入 python-requests 兼容性。

运气不好

最后,我想尝试寻找上游解决方案,涉及Twisted的处理请求的方式。这是我发现任何接近解决方案的唯一地方,txrequests。但是,似乎没有办法将其与Scrapy 联系起来。

所以,在完成我的研究后,我在这里寻求帮助。

最后是问题

虽然我知道这可能不明智,但我想知道如何覆盖 Scrapy.Request 以在整个项目中使用 python-requests

【问题讨论】:

    标签: python python-3.x scrapy python-requests


    【解决方案1】:

    它不起作用,因为请求不是异步的。除非您对此感到满意,否则我看不出使用 scrapy 的意义。

    如果您对 scrapy 请求不满意,可以尝试 aiohttp 或切换到 Go 或 Node 等异步语言。

    【讨论】:

    • txrequests 负责将requests 库扩展为异步。我只是不知道如何或在哪里应用它,因为它会在整个项目中使用。我猜它会在自定义 downloader-middleware 中。
    • 我从未听说过 txrequests。您可能想联系作者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    相关资源
    最近更新 更多