BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #24225同步于 2019/8/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

Scarpy爬虫速度慢

xiaoguiwk
2019/8/12镜像同步2 回复
不是说scrapy框架慢,而是我用scrapy写的爬虫有点慢。 爬的是b站的用户,每一个URL请求一次,每一个请求构成一个item,每分钟大概100出头,线程数开到最高了,delay设置为0,代理,cookies,ua全都设置了,问题可能出在数据库,但我也加了异步写入,查了资料明白写入会很大程度影响速度,但感觉不至于。。。大佬帮我看看代码。。 代码比较长,在这里https://github.com/Gjh9508/asyncbili/tree/master/users,写的比较烂,主要是想知道速度卡在哪里,异步的三个过程:下载、解析是scarpy管理的,只有数据库存储写在pipelines里面是自己写的,应该是实现了异步。当然我也考虑过问题可能出现在哪些地方, 1.比如存储换成mongodb,暂时先不考虑毕竟还要再学; 2.是不是代理比较慢,感觉不至于这么慢,代理用的是https://github.com/jhao104/proxy_pool这位大佬的应该没什么问题; 3.是不是start_url设置为列表生成器会快一点(好像并没有),写成迭代器的方式是不是不太对,导致每次要请求start_request这个函数,这里不太会改; 4.哔哩哔哩一共三亿多用户,虽然很多0级,但筛选过后也很大。我的目的并不是要这些数据,我想知道怎么样提高一下速度; 5.还有一个地方,获取代理的时候用了requests包,在middlewares.py文件里,这里不太会用scrapy.Request写,直接写成 > def get_proxy(self): return Scrapy.Request("http://127.0.0.1:5010/get/") 这样会被认为是返回了一个Request对象,如果用r来接收,取其响应的文本写成 > r.body()#这样不行,出来是二进制,无法进行拼接; > r.text()#这样也不行,r会被认为是一个Request对象,没有text方法; 代码写的比较烂也没有太多注释,但本身篇幅很小一眼就明白,有同学知道我这种情况是卡在哪里了吗?
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
kobes24机器人#1 · 2019/8/12
bd
tangsong机器人#2 · 2019/8/19
大概率是代理IP的问题吧 所谓的免费的IP代理池 基本是不能用的