http://mp.weixin.qq.com/s?__biz=MzAxMjUyNDQ5OA==&mid=2653552228&idx=1&sn=e476bf23556406cbce7de65508d79843&chksm=806dd0d9b71a59cf2b062a19309c849a62ba15790898e5e619205f0f5ec84a90025a8cea05e9&mpshare=1&scene=23&srcid=11252MeE6Qu1DG7LsyBBL7Qh#rd
 
2016-11-25 九茶 Python中文社区
 

本文为作者对其开源项目QQSpider的说明文档。主要替换了程序里一些不可用的链接,对登录时的验证码作了处理,对去重队列作了优化。并且可以非常简单地实现爬虫分布式扩展。

Github项目名称:QQSpider


使用说明

1、启动前配置:

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

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

我们登陆QQ要使用到phantomJS(下载地址:http://phantomjs.org/download.html),下载完将里面的phantomjs.exe解压到python目录下即可。

2、启动程序:

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

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

运行 launch.py 启动爬虫。

代码说明

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

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

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

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

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

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

结语

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

有什么问题请尽量留言,方便后来遇到同样问题的同学查看。

专栏作者简介

九茶
Python工程师,目前居于广州。Github知名开源爬虫QQSpiderSinaSpider作者,经常会在CSDN上分享一些爬虫、数据等福利。爬过的网站有 QQ空间、新浪微博、Facebook、Twitter、WooYun、Github、SearchCode、CSDN、博客园、天猫、大众点评、图吧 网、域名与IP数据、证券投资数据、中国土地数据、某些政府网站等。 除了爬虫领域之外,还会分享一些Python小应用(例如Python+PhantomJS批量注册账号,登录等),接下来在Python中文社区还会分享一些Python在大数据运算(ES、Spark)和数据挖掘方面的文章。

CSDN:http://blog.csdn.net/bone_ace

Github:https://github.com/liuxingming

 

QQ空间爬虫最新分享,一天 400 万条数据(附代码地址)的更多相关文章

  1. 每日技术总结:jquery datetimepicker,微博QQ好友QQ空间微信等分享接口

    前言: 1.jquery datetimepicker 今天遇到一个日期控件格式的问题,默认选中显示的并不是设定的值,而是当天的日期.于是去查了一遍文档. 参考文章:jquery datetimepi ...

  2. (转)Python网络爬虫实战:世纪佳缘爬取近6万条数据

    又是一年双十一了,不知道从什么时候开始,双十一从“光棍节”变成了“双十一购物狂欢节”,最后一个属于单身狗的节日也成功被攻陷,成为了情侣们送礼物秀恩爱的节日. 翻着安静到死寂的聊天列表,我忽然惊醒,不行 ...

  3. QQ空间爬虫--获取好友信息

    QQ空间网页版:https://user.qzone.qq.com/ 登陆后,进入设置,有一个权限设置,设置“谁能看我的空间”为好友可见,然后构造爬虫. (1)获取Cookie 两种方式: 第一种:通 ...

  4. 仿QQ空间动态界面分享

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...

  5. GROUP BY 分组后得到最新即时间最大的一条数据(需添加limit才可生效)

    当使用GROUP BY 分组,默认返回的数据是组中最小的记录即id最小的数据, 当开发中经常会需要分组后将最新的数据放在前面, 为了实现需求,使用了嵌套查询,分别使用order by来排序 SELEC ...

  6. 分享到QQ空间、新浪微博、腾讯微博的代码

    今天公司原来的分享代码,在IE下有问题.网上找了下网上的分享代码. 给网页加上分享代码,借助网友的力量推广网站,目前已经很流行了 以下是网页代码 QQ空间分享代码如下: <a href=&quo ...

  7. 分享到QQ空间、新浪微博、腾讯微博的代码!(收藏)

    QQ空间分享代码如下:    <a href="javascript:void(0);" onclick="window.open('http://sns.qzon ...

  8. 分享到QQ空间、新浪微博、腾讯微博的代码!

    给网页加上分享代码,借助网友的力量推广网站,目前已经很流行了 以下是网页代码 QQ空间分享代码如下: <a href="javascript:void(0);" onclic ...

  9. 软件架构设计学习总结(3):QQ空间技术架构之详解

    QQ空间作为腾讯海量互联网服务产品,经过近七年的发展,实现了从十万级到亿级同时在线的飞跃.在这个过程中,QQ空间团队遇到了哪些技术挑战?其站点前后台架构随着业务规模的变化又进行了怎样的演进与变迁?成长 ...

随机推荐

  1. ipv4理论知识1-ipv4介绍,ipv4记法,地址段个数算法

    定义 在TCP/IP协议中,用于在IP层识别连接到因特网设备的标识符称为因特网地址或IP地址.IPv4地址是一个32位的地址. 地址空间 像IPv4这种定义了地址的协议都有一个地址空间.地址空间就是协 ...

  2. 在阿里云服务器(ECS)上从零开始搭建nginx服务器

    本文介绍了如何在阿里云服务器上从零开始搭建nginx服务器.阿里云服务器(ECS)相信大家都不陌生,感兴趣的同学可以到http://www.aliyun.com/product/ecs去购买,或到体验 ...

  3. 【java开发】面向对象初步认识与基础概念讲解

    简单的把前面的java基础知识讲了,接下来就开始面向对象的旅程了. 对象(Object):简而言之,世界是由对象组成的,一切可见的事物吧 类(class):说白了就是把具有相同的一些特征或是属性归为一 ...

  4. [COPY] How to become a hacker

    Engish version copied from here Why This Document? As editor of the Jargon File and author of a few ...

  5. 【2016-11-11】【坚持学习】【Day24】【WPF 自定义控件 附加属性 自定义事件】

    UserControl ,自定义控件. 这里刚刚想到一个问题.什么时候应该用usercontrol 定义一个控件.什么时候应该重写控件的template和样式,实现新效果. 引用一下人家的话:http ...

  6. 参数命令化 防止Sql注入

    1.先在数据库中完成储存过程 create proc usp_selectStudent ) as select * froom student where StudentName=@studentN ...

  7. POJ2104 K-th Number[主席树]【学习笔记】

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 51440   Accepted: 17594 Ca ...

  8. aop

    做aop做一些事情::: package cn.happy.spring04aop; public interface ISomeService { public void doSomeThing() ...

  9. PAT 1032. 挖掘机技术哪家强(20)

    为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...

  10. JSP基础学习

    JQuery教程: http://www.w3school.com.cn/jquery/ HTTP协议的 http://www.w3.org/Protocols/rfc2616/rfc2616.htm ...