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 2017-03-30 14:43:40 +08:00
不好意思没认真看,下载了两遍是我说错的,你在 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 |