-
Notifications
You must be signed in to change notification settings - Fork 1.2k
项目使用常见问题
1.问:项目部署好复杂啊,我也没有多台机器,我可以单机运行吗?
答:可以单节点运行。celery是去中心化的,如果由于硬件所限,你只有一台机器,也是可以直接按照本文档和项目中 的配置文档说明直接跑通该项目。关于项目使用的 问题都可以在issue中提出来。
2.关于redis的问题:为什么我在给redis设置密码后,并且把redis设置成了守护进程,但是没起作用?
答:如果在linux上面搭redis的话,当我们修改了redis.conf
文件后,我们在启动redis的时候也需要指定redis.conf
文件,通过redis-server redis.conf
来启动,注意redis-server
和redis.conf
的路径,这里为了方便,并未细化.
3.这个项目的模拟登陆和抓取的时候是怎么处理验证码的啊?
答:这个项目在模拟登陆阶段会判断账号是否需要验证码,对于需要验证码的账号,通过打码平台识别验证码进行 操作,我选择的是云打码;对于微博账号抓取的时候被封出现的验证码,目前的处理是从数据库和 redis中删除该账号对应的信息,因为要复现登录后被封需要一些时间来测试,并且某些情况下会验证手机,而某些情况只是识别验证码,这个 还需要进一步求证。
另外,我们应该尽量规避验证码,比如模拟登陆的时候尽量在账号常用地登录,还有一个点就是测试微博的容忍边界,小于它的阈值做采集 就不容易被封(不过速度很慢),毕竟按规矩来被封的风险要小得多。如果有图形图像识别的牛人解决了验证码的问题,欢迎提PR,帮助更多人。
4.这个项目能在windows上执行吗?
答:window上可以执行worker节点,但是不能执行beat节点(即定时任务)。如果要混用windows和linux,那么一定要将celery版本 降级为3.1.25,且将beat节点部署到linux服务器上。
5.这个项目一天能抓多少数据?
答:如果使用极速模式,3台机器每天可抓上百万的用户信息,可抓上千万的微博信息(如果用搜索来抓相关微博,达不到这个量,因为搜索接口 限制非常很严格),它的代价就是账号必然会被封,推荐在网上购买小号进行抓取。如果采用普通模式,那么三台机器每天可抓大概几万条用户 信息,账号较为安全。另外,还有一点是,微博搜索的限制比较严格,速度可能会比抓用户信息和抓用户主页微博慢,这点可能在后面会针对不同 需求的用户进行相应处理。
6.这个项目搜索抓到的数据怎么和手动搜索的数据量不一致?
答:不一致主要是因为搜索是用的高级搜索,默认只搜索原创微博,而用户手动去搜索是搜索的所有微博,包括转发的,所以数据量上会有出入,
如果要抓取所有微博,那么修改search模块的url
和home模块中的home_url
的值即可。
7.可以为这个项目做个web监控和管理页面吗?
答:其实这个需求不是必须的,并且flower已经提供了类似的功能了。使用flower,我们可以监控各个节点的健康状况,且可以看到执行的任务情况
8.为什么我通过执行celery -A tasks.workers worker -l info -c 1
,并没有执行抓取?
上述命令如果执行成功,只是产生了一个worker,我们需要通过执行诸如python login_first.py
这种语句,发任务给worker,它才会执行。除了这种方式,还可以通过定时功能来执行任务,定时功能第一次会延迟执行。
9.我通过celery -A tasks.workers worker -l info -c 1
语句产生了worker,但是无法执行登录任务和抓取任务?
某些机器上,可能会出现bug,需要使用celery -A tasks.workers -Q login_queue,user_crawler worker -l info -c 1
指定具体的task queue,所有task queue可以查看这里
10.执行celery -A tasks.workers worker -l info -c 1
的时候,出现错误celery: command not found
?
这个问题的原因是,shell并没找到celery
这个命令,目前所知的有两种可能:(1)celery这个命令未加入环境变量;(2)当前用户权限不够,可以通过su
切换到root
用户去查看是否上述命令能执行成功,如果能,那么就需要使用chown
或者chmod
把celery
这个可执行文件的权限改为普通用户可以使用,可以通过which celery
查看celery可执行文件所在目录。如果不能通过这种方式找到celery可执行文件,那么可以通过sudo find / -name celery
进行查找,然后将其加入环境变量。
注意:建议使用pip3 install -r requirements.txt
而非pip install -r requirements.txt
,原因是如果你的系统中存在python2,那么会导致所有依赖都装在python2上,而该项目只能在python3上工作。此外,更为推荐的一种方式是使用source env.sh
通过虚拟环境来安装和管理所有依赖。
11.当我执行了celery -A tasks.workers worker -l info -c 1
后,为什么程序没有执行登录和抓取?
当执行完该命令后,worker只是处理就绪状态,你需要发送命令让它执行你需要的任务,其中有两个途径可以达到这个目的,以登录和搜索为例
- 手动执行
python login_first.py
即发送登录任务让worker执行,执行python search_first.py
即发送搜索任务让worker执行,注意他们的先后顺序 - 通过定时任务(只有linux支持)来达到这个目的,执行
celery beat -A tasks.workers -l info
另外,还有别的原因,如程序并未获取到搜索关键词(可以追踪search_first.py
,打印出keywords
看是否为空);还可能是你未通过-Q
指定相关的queue。
12.用户关注和粉丝能爬完吗?(以及这一类的问题)
项目爬虫能爬的只有正常用户上网能用鼠标点击的内容,正常用户看不到的数据,爬虫也无法采集。所以粉丝和关注只能爬五页,其他的也是一样的答案。
13.运行的过程中出现AttributeError: async
错误
这个问题出现的原因是celery
库进行了一些更新和升级,而相应的依赖不兼容。解决方法如下
pip install kombu==4.1.0 pip install celery==4.1.0
14.在配置数据库密码的时候,一定不要使用.
或者!
等特殊字符,否则可能自动创建数据库表失败