【发布时间】:2020-06-14 01:15:37
【问题描述】:
我一直在寻找开始使用ScraPy 进行大型网络抓取项目。在过去 5 年中,我一直在使用 python-requests(人类的 HTTP)和 BeautifulSoup。
我想要使用 requests 库而不是 Scrapy.Request 的原因:
- 在玩
Scrapy时,我注意到返回的内容非常原始,因为它更等同于原始格式。而对于requests.content和requests.text,由于requests更优雅地处理内容编码,输出更清晰。 - 我看到issues 和
Scrapy.Request没有返回与requests库相同的内容。 -
requests提供了方便地访问响应标头的简单方法,例如rel="next"链接,而Scrapy.Request没有(并且还将标头转换为大写并将格式强制转换为字节)。 -
requests提供了一种方便的response.json()方法(我知道,我知道,微不足道,但仍然如此)。它已在 this issue 中进行了简要讨论,并且自 2016 年以来基本上已经腐烂。
我在 StackOverflow 上看到过类似的问题。最直接的请求是here,但它并没有受到太多关注,就像我发现的其他问题一样,我提到想要将python-requests 与ScraPy 一起使用,人们要么在不知不觉中假设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