我如何重写Scrapy的请求并使用python-requests来代替?

bxjv4tth  于 2023-01-18  发布在  Python
关注(0)|答案(1)|浏览(249)

我一直在寻找开始使用ScraPy为一个大型的网页抓取项目。我一直在使用python-requests(HTTP为人类)和BeautifulSoup为大多数的网站,我已经刮了过去5年。

我希望使用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,要么干脆忽略了问题的要点,提供了一个与上级的要求。
我开始研究的第一个Scrapy方法是start_requests,以了解如何重写Scrapy.Request

没有好运

然后我想看看是否有人创建了一个定制的Downloader-Middleware,允许直接兼容python-requests

没有好运

最后,我想尝试搜索一个上游解决方案,包括Twisted处理请求的方式,这是我唯一找到接近txrequests解决方案的地方,但是,似乎没有一种方法可以将其与Scrapy联系起来。
所以,在做了我的研究之后,我在这里寻求帮助。
∮ ∮最后的问题是
虽然我知道这可能是不明智的,但我想知道如何覆盖Scrapy.Request以在整个项目中使用python-requests

r7knjye2

r7knjye21#

它不会工作,因为请求不是异步的,除非你同意,在这种情况下,我看不出使用scrappy的意义。
如果你不喜欢零碎的请求,你可以试试aiohttp或者改用Go或Node这样的异步语言。

相关问题