关于scrapy请求效率太低的问题

奔跑的菜菜 2019-07-28 01:31:32
初学者使用scrapy spiders爬取某网站的数据,遇到一个问题。

情况是这样的,我要爬取的是一个返回数据的接口,我可以入参pageSize和pageNumber来控制返回数据量的多少。
由于总数据量3W多条,于是使用Size=1000(返回1000条数据),结果大部分请求超过3分钟超时了(scrapy默认超时时间为180S),我怀疑过是否是因为返回数据太大导致scrapy底层处理response对象耗时太久了,但是等我使用requests.get(url)后,我发现原来是接口服务端处理时间比较长。

在使用requests请求查找问题时,自己做了时间和数据大小输出,情况如下:
当size=10时

耗时: 0:00:20.995203
当返回 10 条数据时,数据量大小:17.846 kb


当size=100时

耗时: 0:00:48.262390
当返回 100 条数据时,数据量大小:189.148 kb


当size=1000时

耗时: 0:04:12.454073
当返回 1000 条数据时,数据量大小:1980.934 kb


看到当查询1000条数据要花费4分钟12秒时,我有点茫然,3W条数据至少要30次请求,也就是至少要耗时126分钟,再加上connect和disconnect的时间,这有点消耗不起啊。
我用scrapy跑起来,感觉好像是单线程,上一个请求必须结束下一个请求才起,该如何使他并发请求以节约时间呢。

因为初学,还搞不太清楚下载器等等其他的组件如何使用,现在代码全在spider.py中跑,也没有用到其他组件,代码如下图:



请大家指点一下,如何提高效率。
...全文
339 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
奔跑的菜菜 2019-07-28
  • 打赏
  • 举报
回复
原来发现 明明自己写的是单yield 把倒数第三行的if改成while就好了

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧