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 替代

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 Mar 29, 2017 因为你这是一个同步操作,用 deferreds |
2 bazingaterry Mar 29, 2017 via iPhone 又想像同步一样逻辑清晰,又想有异步一样的性能,貌似很难调和呢…… |
3 lilydjwg Mar 29, 2017 不要用 requests.get ! 用同一个 requests.Session ,你能提速一倍以上! |
4 dsg001 OP @knightdf 能分享个 demo 不,文档啃的太慢 @bazingaterry 一直没研究锅 twisted @lilydjwg 实际代码中用的 requests.Session ,但速度比原生还是差的太多 |
5 bazingaterry Mar 29, 2017 @dsg001 twisted 的确有点嗦…… |
7 dsg001 OP |
8 onlyice Mar 29, 2017 via Android Twisted 我硬是没学会。。有一些门槛。。 |
10 kakadong Mar 30, 2017 你这是在乱搞啊,下载中间件是负责修改每个 request 和 response 的,是不做下载这个动作的!你在里面加一个 requests.get 操作,等于每个网页你都下载了两遍,而且这个 get 操作还是同步的!! |
11 kakadong Mar 30, 2017 不好意思没认真看,下载了两遍是我说错的,你在 process_request 里返回了 response ,那 scrapy 就不会再去下载这个网页,但这样,并发就完全没有了,跟单线程用 requests 没什么区别 |
13 mathgl Mar 31, 2017 可以考虑使用 treq https://github.com/twisted/treq |
14 Vinkito May 8, 2017 请问楼主找到好的解决方法了么,有没有 demo 提供参考一下。 |
15 dsg001 OP |