怎么用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
嗯,代码挺渣的,将就着看吧= =!!!



