Skip to content

项目使用常见问题

resolvewang edited this page Aug 5, 2018 · 8 revisions

1.问:项目部署好复杂啊,我也没有多台机器,我可以单机运行吗?

答:可以单节点运行。celery是去中心化的,如果由于硬件所限,你只有一台机器,也是可以直接按照本文档和项目中 的配置文档说明直接跑通该项目。关于项目使用的 问题都可以在issue中提出来。

2.关于redis的问题:为什么我在给redis设置密码后,并且把redis设置成了守护进程,但是没起作用?

答:如果在linux上面搭redis的话,当我们修改了redis.conf文件后,我们在启动redis的时候也需要指定redis.conf 文件,通过redis-server redis.conf来启动,注意redis-serverredis.conf的路径,这里为了方便,并未细化.

3.这个项目的模拟登陆和抓取的时候是怎么处理验证码的啊?

答:这个项目在模拟登陆阶段会判断账号是否需要验证码,对于需要验证码的账号,通过打码平台识别验证码进行 操作,我选择的是云打码;对于微博账号抓取的时候被封出现的验证码,目前的处理是从数据库和 redis中删除该账号对应的信息,因为要复现登录后被封需要一些时间来测试,并且某些情况下会验证手机,而某些情况只是识别验证码,这个 还需要进一步求证。

另外,我们应该尽量规避验证码,比如模拟登陆的时候尽量在账号常用地登录,还有一个点就是测试微博的容忍边界,小于它的阈值做采集 就不容易被封(不过速度很慢),毕竟按规矩来被封的风险要小得多。如果有图形图像识别的牛人解决了验证码的问题,欢迎提PR,帮助更多人。

4.这个项目能在windows上执行吗?

答:window上可以执行worker节点,但是不能执行beat节点(即定时任务)。如果要混用windows和linux,那么一定要将celery版本 降级为3.1.25,且将beat节点部署到linux服务器上。

5.这个项目一天能抓多少数据?

答:如果使用极速模式,3台机器每天可抓上百万的用户信息,可抓上千万的微博信息(如果用搜索来抓相关微博,达不到这个量,因为搜索接口 限制非常很严格),它的代价就是账号必然会被封,推荐在网上购买小号进行抓取。如果采用普通模式,那么三台机器每天可抓大概几万条用户 信息,账号较为安全。另外,还有一点是,微博搜索的限制比较严格,速度可能会比抓用户信息和抓用户主页微博慢,这点可能在后面会针对不同 需求的用户进行相应处理。

6.这个项目搜索抓到的数据怎么和手动搜索的数据量不一致?

答:不一致主要是因为搜索是用的高级搜索,默认只搜索原创微博,而用户手动去搜索是搜索的所有微博,包括转发的,所以数据量上会有出入, 如果要抓取所有微博,那么修改search模块urlhome模块中的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或者chmodcelery这个可执行文件的权限改为普通用户可以使用,可以通过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.在配置数据库密码的时候,一定不要使用.或者!等特殊字符,否则可能自动创建数据库表失败