开源软件名称:WeiboSpider
开源软件地址:https://gitee.com/resolvewang/WeiboSpider
开源软件介绍:
关于本项目 - 实现内容包括用户信息、用户主页所有微博、微博搜索、微博评论和微博转发关系抓取等
- 本项目基于本人实际的工作,并对此做了大量的修改,可以保证项目的稳定运行
为何选择本项目 - 功能全面:包括了用户信息抓取、指定关键字搜索结果增量抓取、指定用户主页所有微博抓取、评论抓取和转发关系抓取等
- 数据全面:PC端展现的数据量比移动端更加丰富。并且相比于其它同类项目对微博的简单分析,本项目做了大量细致的工作,比如不同
domain 不同用户的解析策略、不同domain 不同用户的主页分析策略等 - 稳定!项目可以长期稳定运行。
- 为了保证程序能长期稳定运行,数据所有的网络请求都是通过抓包手动分析的,未用任何自动化工具,包括模拟登陆!从另一个方面来说,抓取速度也是比较有保证的
- 通过合理的阈值设定,账号可以保证安全。但是不推荐用户使用自己的常用账号
- 即使账号不可用或者登陆失败,项目都对其做了处理(智能冻结账号,出错重试等),以保证每次请求都是有效的,并及时把错误反馈给用户
- 通过大量的异常检测和处理,几乎捕获了所有的解析和抓取异常。编写了大量的解析代码来获取足够全面的信息
- 复用性和二次开发性很好。项目很多地方都有详细的代码注释,方便阅读。即使本项目不能完全满足你对微博数据采集和分析的需求,你也可以自己在该项目的基础上做二次开发,项目已经在微博抓取和各个模版解析上做了大量工作。
- 由于本项目与本人实际工作有关联(代码并不是工作中使用的代码),所以可以放心它会长期更新。目前已经迭代一年有余了。
- 丰富文档支持:请点击wiki查看所有文档。如果文档仍然不能解决你的问题,欢迎提issue,维护者看到后都会积极回答,也可以通过加QQ群(群号:499500161, 暗号:微博爬虫,务必备注加群信息,否则视为广告处理)进行交流。
配置和使用 使用前请大家务必仔细读项目配置 和 项目使用 配置建议新手和小白们先查看演示视频(链接: https://pan.baidu.com/s/1eSy2qzw 密码: ypn5)
上面其实已经介绍完整个项目的配置流程了.如果大家对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
使用常见问题 1.问:项目部署好复杂啊,我也没有多台机器,我可以单机运行吗? 答:可以单节点运行。celery是去中心化的,如果由于硬件所限,你只有一台机器,也是可以直接按照本文档和项目中的配置文档说明直接跑通该项目。关于项目使用的问题都可以在issue中提出来。 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,我们可以监控各个节点的健康状况,且可以看到执行的任务情况 其它说明 - 本项目运行环境是Python3.x,由于Py2和Py3关于字符编码完全不同,所以如果需要在Py2上运行该程序,需要修改解析模块的相关代码
- 建议使用linux或者mac作为worker节点,windows平台也可以作为worker节点,但是一定不能作为beat节点,并且celery版本要注意一致。
- 目前该项目已经抓取将近三十万条微博用户数据,如果有需要数据的同学,可以开issue。我是打算数据量大了过后再进行分享。
- 目前项目有普通抓取和极速抓取两种模式,细节请查看分布式微博爬虫的普通模式与极速模式
- 建议每台机器上都指定queue,目前发现如果启动worker的时候只指定
-c 1 -l info 而不指定-Q 的话,可能运行会出现问题 - 如果不需要登录的模块建议就别使用cookie进行抓取,因为这样账号的负载更小。至于哪些信息不需要登录,且是有价值的,这个还会再进行调研,和等待用户的反馈。
- 如果是开发版,可能会存在运行出问题的情况,所以建议通过release页面下载稳定版
- 文档方面,目前在WiKi中有一些较为系统的知识。如果使用过程中遇到问题,可以给该项目提issue,也可以加QQ群交流,群号是:499500161, 暗号是:微博爬虫。注意加群务必备注信息,否则将视为广告而拒绝!
- 项目维护者目前只有我一个人,所以功能更新速度可能会比较慢,目前我只会关注自己会用到或者觉得有趣的部分,有别的需求的朋友可以提feture,如果恰巧也懂Python,欢迎提PR
- 如果试用了本项目,觉得项目还不错的,麻烦多多宣传啦。觉得项目太渣或是大家有一些有意义、有趣的想法,欢迎拍砖、吐槽或者提PR,作者接受一切有意义的建议和提问。另外,随手点个
star 也是对本人工作的肯定和鼓励,作者也接受捐赠:laughing:。送人玫瑰,手有余香:blush:。
TODO 如何贡献 - 如果遇到使用中有什么问题,可以在issue中提出来
- 代码中如果有逻辑不合理或者内容不完善的地方,可以fork后进行修改,然后Pull Request,如果一经采纳,就会将你加入contributors,注意提PR之前,检查一下代码风格是否符合PEP8并且改动的代码已经在自己机器上做了充足的测试(保证能长期稳定运行)
- 可以实现
todo 中的需求 - 欢迎在issue中提有意义的future
- 希望有仔细研究过微博反爬虫策略的同学积极提建议
点击查看贡献者名单 赞助本项目如果本项目确实解决了你的刚需,或者对你有较大的启发,不妨请作者喝杯咖啡或者买本新书。 致谢最后,祝大家用得舒心,用着不爽欢迎吐槽! |
请发表评论