我一直在寻找开始使用ScraPy为一个大型的网页抓取项目。我一直在使用python-requests(HTTP为人类)和BeautifulSoup为大多数的网站,我已经刮了过去5年。
我希望使用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
,要么干脆忽略了问题的要点,提供了一个与上级的要求。
我开始研究的第一个Scrapy
方法是start_requests
,以了解如何重写Scrapy.Request
。
没有好运
然后我想看看是否有人创建了一个定制的Downloader-Middleware
,允许直接兼容python-requests
。
没有好运
最后,我想尝试搜索一个上游解决方案,包括Twisted
处理请求的方式,这是我唯一找到接近txrequests
解决方案的地方,但是,似乎没有一种方法可以将其与Scrapy
联系起来。
所以,在做了我的研究之后,我在这里寻求帮助。
∮ ∮最后的问题是
虽然我知道这可能是不明智的,但我想知道如何覆盖Scrapy.Request
以在整个项目中使用python-requests
?
1条答案
按热度按时间r7knjye21#
它不会工作,因为请求不是异步的,除非你同意,在这种情况下,我看不出使用scrappy的意义。
如果你不喜欢零碎的请求,你可以试试aiohttp或者改用Go或Node这样的异步语言。