您的位置首页百科知识

怎么用python爬qq空间的说说列表并保存到本地?

怎么用python爬qq空间的说说列表并保存到本地?

的有关信息介绍如下:

怎么用python爬qq空间的说说列表并保存到本地?

前几天刚刚爬完了一百多个好友的总计5万条说说,说一下自己的思路。

QQ空间的空间动态都是由JavaScript控制的(电脑和手机触屏版皆是如此),自己便选择了Selenium作为对数据获取的工具。

总的工具:

Python+Selenium+Firefox+MongoDB

总的过程为:

1、从QQ邮箱中获取好友QQ号;

2、访问好友QQ空间的说说分页;

3、访问并获取说说数据;

最开始想的是从QQ空间的个人中心的好友动态中逐条获取好友的动态,但折腾了很久发现,无论是电脑版还是触屏版,都有一个下翻加载,再是点击加载的Ajax,能力低下,百度谷歌了各种方法,皆无法下拉加载数据。此路只好作罢。

后来从一篇《

》的文章中想到,先获取好友的QQ号,然后再把QQ号填充到QQ空间的URL中,对好友QQ空间进行访问。

1、从QQ邮箱中获取好友QQ号

QQ邮箱的通讯录中有一个导出通讯录的功能,可以选择CSV格式,方便使用Python进行读取操作。

打开之后是这个样子的(一小部分):

处理之后放入列表之中就成这样了:

然后,进行正题:

分析QQ空间的网页可知:

1、好友QQ空间的说说页面URL为:http://user.qzone.qq.com/{QQ号}/311

2、说说列表的分页亦由javascript控制:

3、正常访问的页面存在id为'QM_OwnerInfo_Icon'的元素;

4、说说的内容存在于另一个iframe中;

所以,爬取说说的主体部分为:

1、GET空间说说页面的URL:

2、判断页面中是否存在登录框,如果存在则执行登录操作:

2、在登录QQ空间,进入好友空间后,判断其是否可访问,如果可访问,则爬取第一页并写入数据库(有些拒绝访问或是要求回答问题,在此只爬取能够访问到的空间说说):

3、有些好友说说发表的少,只有第一页的内容,所以判断页面是否有第二页的内容,如果有,继续爬取:

4、使用多线程或多进程或循环或遍历,把QQ号列表中的QQ作为参数填充到爬取的主函数中。使用多进程模块multiprocessing的Pool类老是在第一个QQ号爬取完之后报错,折腾不来,又有大把的时间,索性直接for循环遍历了。

最后对爬取的数据进行了一些简单的处理和统计:

今年七个月每月的说说发表量

今年七个月说说发表量前20

嗯,代码挺渣的,将就着看吧= =!!!