搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 大数据挖掘DT数据分析 > QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)

QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)

大数据挖掘DT数据分析 2017-11-30




爬虫功能:

QQSpider 使用广度优先策略爬取QQ空间中的个人信息、日志、说说、好友四个方面的信息。
判重使用“内存位”判重,理论上亿数量级的QQ可瞬间判重,内存只占用400M+。
爬虫速度可达到单机每天400万条数据以上(具体要考虑网速、网络带宽、稳定性等原因。我在学校是400万+,但在公司那边却只有六成的速度,普通家庭网络可能会更慢)。



环境、架构:

开发语言:Python2.7
开发环境:64位Windows8系统,4G内存,i7-3612QM处理器。
数据库:MongoDB 3.2.0
(Python编辑器:Pycharm 5.0.4;MongoDB管理工具:MongoBooster 1.1.1)

主要使用 requests 模块抓取,部分使用 BeautifulSoup 解析。
多线程使用 multiprocessing.dummy 。
抓取 Cookie 使用 selenium 和 PhantomJS 。
判重使用 BitVector 。




使用说明:

启动前配置:

  1. 需要安装的软件:python、Redis、MongoDB(Redis和MongoDB都是NoSQL,服务启动后能连接上就行,不需要建表什么的)。

  2. 需要安装的Python模块:requests、BeautifulSoup、multiprocessing、selenium、itertools、redis、pymongo。



启动程序:

  1. 进入 myQQ.txt 写入QQ账号和密码(不同QQ换行输入,账号密码空格隔开)。如果你只是测试一下,则放三两个QQ足矣;但如果你开多线程大规模抓取的话就要用多一点QQ号(thread_num_QQ的2~10倍),账号少容易被检测为异常行为。

  2. 进入 init_messages.py 进行爬虫参数的配置,例如线程数量的多少、设置爬哪个时间段的日志,哪个时间段的说说,爬多少个说说备份一次等等。

  3. 运行 launch.py 启动爬虫。


4.爬虫开始之后首先根据 myQQ.txt 里面的QQ去获取 Cookie(以后登录的时候直接用已有的Cookie,就不需要每次都去拿Cookie了,遇到Cookie失效也会自动作相应的处理)。获取完Cookie后爬虫程序会去申请四百多兆的内存,申请的时候会占用两G左右的内存,大约五秒能完成申请,之后会掉回四百多M。


5.爬虫程序可以中途停止,下次可打开继续抓取。


运行截图:

QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)



代码说明:

  1. mongodb用来存放数据,redis用来存放待爬QQ和Cookie。

  2. 爬虫之前使用的是BitVector去重,有一部分人反映经常会报错,所以现在使用基于Redis的位去重,内存占用不超过512M,能容纳45亿个QQ号瞬间去重,而且方便分布式扩展。

  3. 爬虫使用phantomJS模拟登陆QQ空间,有时候会出现验证码。我使用的是云打码(自行百度),准确率还是非常高的,QQ验证码是4位纯英文,5元可以识别1000个验证码。如果需要请自行去注册购买,将账号、密码、appkey填入 yundama.py,再将 public_methods.py 里的dama=False改成dama=True即可。

  4. 分布式。现在已经将种子队列和去重队列都放在了Redis上面,如果需要几台机器同时爬,只需要将代码复制一份到另外一台机子,将连Redis时的localhost改成同一台机器的IP即可。如果想要将爬下来的数据保存到同一台机,也只需要将连MongoDB时的localhost改成该机器的IP即可。

  5. 为了让程序不那么复杂难懂,此项目只用了多线程,即只用到了一个CPU。如果实际生产运行的话可以考虑将程序稍作修改,换成多进程+协程,或者异步。速度会快很多。

  6. 最后提醒一下,爬虫无非就是模仿人在浏览器上网的行为,你在浏览器上无法查看的信息爬虫一般也是无法抓取。所以,就不要再问我能不能破解别人相册的这种问题了,空间加了访问权限的也无法访问。程序输出的日志中2016-11-19 01:05:33.010000 failure:484237103 (None - http://user.qzone.qq.com/484237103)这种,一般就是无法访问的QQ。还有,我们是无法查看一个QQ的所有好友的,所以爬下来的好友信息也只是部分好友。爬虫不是黑客,希望理解。



说说数据:
QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)

日志数据:
QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)


好友关系数据:
QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)

个人信息数据:
QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)

QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)




数据库说明:

QQSpider主要爬取QQ用户的说说、日志、朋友关系、个人信息。
数据库分别设置 Mood、Blog、Friend、Information 四张表。





Friend 表:
 _id:采用 QQ 作为唯一标识。
 Num:此QQ的好友数(仅统计已抓取到的)。
 Fx:朋友的QQ号,x代表第几位好友,x从1开始逐渐迭加。





结语:

  • 爬虫是偏后台型的任务,以抓取效率为主,并没有很好的用户界面,并且需要不断地维护。所以对于完全没有编程基础的人来说,可能会遇到各种各样的问题。此项目最初的目的是为大家提供QQ空间爬虫的一种架构,并不保证程序一直能跑。只要腾讯服务器端稍有变动,例如某一个链接变了,可能程序就抓不到数据了,此时程序也要相应地将链接换成新的,如果网页结构变了,解析规则也要相应地修改。

http://blog.csdn.net/bone_ace/article/details/53213779



人工智能大数据与深度学习




大数据挖掘DT数据分析


教你机器学习,教你数据挖掘



版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)》的版权归原作者「大数据挖掘DT数据分析」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注大数据挖掘DT数据分析微信公众号

大数据挖掘DT数据分析微信公众号:datadw

大数据挖掘DT数据分析

手机扫描上方二维码即可关注大数据挖掘DT数据分析微信公众号

大数据挖掘DT数据分析最新文章

精品公众号随机推荐