ResolveWang / weibospider
- четверг, 31 августа 2017 г. в 03:13:58
⚡️ 新浪微博爬虫(分布式),部署简单,接口丰富,文档详细,视频支持,可灵活定制满足自己的需求。抓取内容(PC端)包括微博用户资料、特定关键词微博、用户主页所有微博、评论信息和转发信息。欢迎watch跟进,star支持
domain
不同用户的解析策略、不同domain
不同用户的主页分析策略等使用前请大家务必仔细读项目配置 和 项目使用
建议新手和小白们先查看演示视频(链接: https://pan.baidu.com/s/1eSy2qzw 密码: ypn5)
环境配置:如果环境配置经验比较少,建议直接点击查看项目环境配置
项目相关配置
source env.sh
,直接创建项目需要的虚拟环境和安装相关依赖。注意目前env.sh
中支持的发行版是CPython
和Anaconda
,如果Python发行版
是其它,那么可能需要修改env.sh
文件中安装virtualenv
的命令.虚拟环境默认安装在项目根目录,文件夹是.env
。执行source env.sh
会默认安装所有项目需要的依赖。pip install -r requirements.txt
。这里celery版本用的3.1.25,目的是兼容windows用户。
如果你是linux或者mac用户,建议将celery版本升级成4.x。特别注意,Windows平台上Celery的定时功能不可用!所以如果需要用到定时任务分发的话,请务必将beat部署到linux或者mac上.weibo
的数据库,然后在项目根目录下,运行python create_all.py
创建该项目需要的数据库表上面其实已经介绍完整个项目的配置流程了.如果大家对docker比较熟悉,也可以使用基于docker的方式进行部署。
如果大家有使用docker的经验,估计也不用我多说了吧,只是要注意一点,构建镜像的时候需要在项目的根目录,因为在构建
镜像的过程中会拷贝WeiboSpider
整个项目,目前用的硬编码,除了挂载可以灵活一点也没找到别的办法。镜像构建语句可以
是
docker build -f WeiboSpider/Dockerfile -t resolvewang/weibospider:v1.0 .
构建好镜像后运行容器默认是接受所有任务路由,如果只接收部分,直接覆盖CMD
的命令即可,比如我只想执行login任务,那么
docker run --name resolvewang/weibospider:v1.0 celery -A tasks.workers -Q login_queue worker -l info -c 1
又比如通过docker启动定时器
docker run --name spiderbeater resolvewang/weibospider:v1.0 celery beat -A tasks.workers -l info
入口文件:如果有同学有修改源码的需求,那么建议从入口文件开始阅读
基本用法:请先在数据库中添加基本数据,然后再按照启动各个节点的worker -> 运行login_first.py -> 启动定时任务或者别的任务这个顺序进行,下面是详细说明
celery -A tasks.workers -Q login_queue,user_crawler worker -l info -c 1
。如果不指定-Q
参数,
即运行celery -A tasks.workers worker -l info -c 1
,那么所有任务都能够在该节点执行。所有的queue及作用和更多关于worker的知识请
在wiki中查看pythonlogin_first.py
获取首次登陆的cookie,
需要注意它只会分发任务到指定了login_queue
的节点上或者未指定 -Q
的节点上celery beat -A tasks.workers -l info
。因为beat任务会有一段时间的延迟(比如登录任务会延迟20个小时再执行),所以第二步要通过python login_first.py
来获取worker
首次运行需要的cookies.如果你想马上启动其他任务,而非等定时任务启动,那么可以执行相应的 *.first.py
,比如我想在worker启动和login_first.py执行后就执行用户抓取任务,那么就通过
python user_first.py
来执行flower -A tasks.workers
,通过'http://xxxx:5555' 访问所有节点信息,这里的xxxx
指的是节点的IP.
如果需要让外网访问,可以这样celery -A tasks.workers flower --address=0.0.0.0 --port=5555
mode
的值为quick
。关于极速和普通模式的区别,
请查看wiki其它
1.问:项目部署好复杂啊,我也没有多台机器,我可以单机运行吗?
答:可以单节点运行。除了单节点,也可以通过单机运行,单机运行的话,需要对代码做少许修改。主要修改方法是找到你需要的功能的入口文件,
然后跟着改,需要改的地方是@app.task
这些函数的代码。以登录为例,如果需要单机登录的话,那么就先到login模块
中把send_task()
这条语句去掉,直接改成调用login_task()
函数即可。这里send_task()
是网络调用,修改后就成了本地调用了
2.关于redis的问题:为什么我在给redis设置密码后,并且把redis设置成了守护进程,但是没起作用?
答:其实这个问题和项目关系不是特别大吧。。。不过考虑到有的同学并不熟悉redis,我这里还是阐明一下,
如果在linux上面搭redis的话,当我们修改了redis.conf
文件后,我们在启动redis的时候也需要指定redis.conf
文件,启动之前,最好把redis-server
加入到环境变量中。比如我的redis.conf
放在/etc/redis
中,
那么我可以通过先切换到/etc/redis
目录,再通过redis-server redis.conf
来启动redis server,也可以
直接redis-server /etc/redis/redis.conf
来启动,前提是 redis-server文件需要在环境变量中.另外,还得
注意一点,如果是centos的话,redis3.2.7可能会在make&&make install
阶段报错,建议下载redis3.2.8
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,我们可以监控各个节点的健康状况,且可以看到执行的任务情况
-c 1 -l info
而不指定-Q
的话,可能运行会出现问题star
也是对本人工作的肯定和鼓励微博内容抓取相关
uid
)请插入seed_ids表home_url
和ajax_home_url
中的is_ori=1
为is_all=1
来
抓取用户的所有微博。目前指定用户是基于已有的seed_ids
表中的home_crawled=0
的用户,你也可以自己指定想要抓取的用户。get_comment_list()
来抓取指定微博的所有评论,包括根评论和子评论。目前抓取的评论是从weibo_data
表中选取的comment_crawled=0
的微博,你可以指定微博mid来定制化爬取评论。反爬虫相关
其它
tasks
模块的作用和使用方法(请查看wiki中关1task queue
的说明)。todo
中的需求点击查看贡献者名单
如果本项目确实解决了你的刚需,或者对你有较大的启发,不妨请作者喝杯咖啡或者买本新书。
star
支持的网友最后,祝大家用得舒心,用着不爽欢迎吐槽!