class MyDownloaderMiddleware(object): def process_request(self, request, spider): res = requests.get(request.url) return HtmlResponse(request.url, body=res.content, encoding='utf-8', request=request)
scrapy 的下载器调教起来不如 requests 方便,所以想用 requests 替代
![]() | 1 knightdf 2017-03-29 17:51:02 +08:00 因为你这是一个同步操作,用 deferreds |
2 bazingaterry 2017-03-29 17:52:20 +08:00 via iPhone 又想像同步一样逻辑清晰,又想有异步一样的性能,貌似很难调和呢…… |
3 lilydjwg 2017-03-29 17:54:09 +08:00 不要用 requests.get ! 用同一个 requests.Session ,你能提速一倍以上! |
![]() | 4 dsg001 OP @knightdf 能分享个 demo 不,文档啃的太慢 @bazingaterry 一直没研究锅 twisted @lilydjwg 实际代码中用的 requests.Session ,但速度比原生还是差的太多 |
5 bazingaterry 2017-03-29 19:20:53 +08:00 @dsg001 twisted 的确有点嗦…… |
![]() | 7 dsg001 OP |
![]() | 8 onlyice 2017-03-29 21:19:55 +08:00 via Android Twisted 我硬是没学会。。有一些门槛。。 |
10 kakadong 2017-03-30 14:18:29 +08:00 你这是在乱搞啊,下载中间件是负责修改每个 request 和 response 的,是不做下载这个动作的!你在里面加一个 requests.get 操作,等于每个网页你都下载了两遍,而且这个 get 操作还是同步的!! |
11 kakadong 不好意思没认真看,下载了两遍是我说错的,你在 process_request 里返回了 response ,那 scrapy 就不会再去下载这个网页,但这样,并发就完全没有了,跟单线程用 requests 没什么区别 |
![]() | 13 mathgl 2017-03-31 19:51:32 +08:00 可以考虑使用 treq https://github.com/twisted/treq |
14 Vinkito 2017-05-08 00:48:38 +08:00 请问楼主找到好的解决方法了么,有没有 demo 提供参考一下。 |
![]() | 15 dsg001 OP |