用python爬取QQ空间
好久没写博文了,最近捣鼓了一下python,好像有点上瘾了,感觉python比js厉害好多,但是接触不久,只看了《[大家网]Python基础教程(第2版)[www.TopSage.com]》的前7章,好多东西还不会,能做的也比较少。我想做的是爬QQ空间,然后把空间里的留言,说说拷下来,已经成功做到了,只是,拷下来是word文档,看着没有在线看那么有感触,有些话,觉得不像自己会说的。
我花了好多时间,幸好最近清闲,有时间给我慢慢学。一开始,我使用urllib去登陆QQ空间:
def getCookieOpener():
postUrl="http://qzone.qq.com"
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support)
postData={
"app":"adv",
"return":"http://user.qzone.qq.com/",
"username":"登陆名",
"password":"登陆密码"
}
postData = urllib.urlencode(postData)
loginRequest = opener.open(postUrl,postData)
return opener
会报错,建议我登陆手机端页面,几番尝试,都不行,我去百度,果然,在我前面已经有好多人实践过了。查到了使用selenium中的webdriver库模拟浏览器操作,第六感告诉我,这个非常好,可以做很多事情。立马在cmd里安装这个包:pip install selenium,然后研究了下网上的一个例子:http://www.zh30.com/python-selenium-qzone-login.html,发现selenium的使用方法非常简单,查找元素并点击之类的操作和js有点相似,看完,开始自己动手,结果报错了,无论是尝试driver = webdriver.Chrome()还是driver = webdriver.Firefox(),都是报错:

我查到模拟谷歌浏览器要装个chromedriver.exe来辅助,但是火狐没说需要耶,猜想是不是要装个python3版本才行,目前用的是python2.7,结果还是报一样的错误,实在没辙了,就装了个chromedriver.exe,模拟谷歌,毕竟谷歌浏览器我用得最多。python3的语法和python2有区别,最先发现的是print方法。原来,新版的火狐浏览器也需要安装点什么东西才行,有个新加入博客的伙伴回复了我的评论:

原谅我的孤闻,其实很多东西我都不懂。
好了,程序终于能跑了,神奇的事情发生了,程序打开了一个新的谷歌页面,按照代码所写的打开了QQ登陆页,然后自动填进了名称和密码,自动点击提交按钮,成功登陆了,我愣了愣,原来所说的模拟登陆是这么的可视化,真好。然后我开始研究怎么把自己的所有留言都导出来。先说一个把内容下载到txt或者其他格式的方法:
#日志文件
def logToFile(content,name="liuyan.txt"):
fileH=open(name,"a+")
try:
print(content)
fileH.write(content+"\n")
except Exception as e:
print("except:"+str(e))
finally:
fileH.close()
接下来就是获取问题了,我要获取li里的内容,然后翻到下一页,继续获取,直到全部获取完毕,留言板html结果如下图:

我的核心代码是:
def getData():
num=1
while (num<265):
num+=1
time.sleep(2)
memu=driver.find_element_by_id('ulCommentList')
logToFile(memu.text)
p='QZBlog.Util.PageIndexManager.goDirectPage('+str(num)+')'
#driver.execute_script调用页面的js
driver.execute_script(p+';return false;')
if num==265:
time.sleep(2)
memu=driver.find_element_by_id('ulCommentList')
logToFile(memu.text)
不需要直接获取每个li标签的内容,获取外层ul的文本即可,这种方法只能获取核心文字,图片无法拷贝,下载完的样子是这样:

拷完自己的,又去把闺蜜的留言拷了一份,她的留言比我多多了,因为她很喜欢自己去给自己留言,拷的速度还是蛮快的,如果我不用time.sleep(延时执行)会更快,但是不用延时,有时会报错,估计是页面元素还没加载出来,获取不到。
下面继续说说怎么爬取说说以及说说的图片(我真是太无聊了 )
每条说说的内容都包含在类名为“content‘的pre标签中,说说发布的时间在类名为"c_tx c_tx3 goDetail"的a标签中,于是这样获取内容:(我是百度的,哈哈,如果是我,我估计还不会用zip)
contents = driver.find_elements_by_css_selector('.content')
times = driver.find_elements_by_css_selector('.c_tx.c_tx3.goDetail')
for c,t in zip(contents,times):
data =t.text+"\n"+c.text+"\n"
logToFile(data)
这样得出的内容是这样的:

很清晰明了,但是看着总少了那种feel。我自己想了个功能,就是把说说的图片也下载下来,本想一起放进word文档,但是会报错,于是放弃了,改为放到一个单独的文件夹中:
hp=driver.find_elements_by_class_name('img-attachments-inner')
ho=''
for ho in hp:
hq=ho.find_elements_by_tag_name('a')
for tg in hq:
try:
linkF=tg.get_attribute('href')
urllib.request.urlretrieve(linkF,'./myshuoshuo/%s.jpg' % str(x))
x+=1
except:
logToFile('something was wrong!')
上面的代码有个地方坑苦了我,由于之前的driver.find_elements_by_css_selector方法是我直接复制网上的,这次我下载图片打成了:driver.find_element_by_css_selector,总是报错,报hp不是个可迭代的对象,调试输出也的确只输出第一个图片的内容,我就好纳闷了,查了好多,百度和谷歌都翻了,我之前一直用的都是find_element,并不知道还有个find_elements,所以当我找到一篇博客,上面很清晰明了地告诉我,应该把前者改为后者,认真对比之后我才知道是少了个”s",加上果然不报错了,也怪我自己不细心,没留意到它们之间的区别,或者说我的基础还不结实,我刚接触不久,所以值得原谅,嘻嘻。翻页是判断是否还有下一页这个跳转,有就跳到下一页,继续获取:

try:
driver.find_element_by_link_text('下一页')
d = True
except:
d = False
当变量d为真时,点击”下一页“按钮。看着下载回来的照片倒是挺有感觉,哈哈。
要保持学习,好好努力,恩恩。
用python爬取QQ空间的更多相关文章
- Python爬取qq空间说说
#coding:utf-8 #!/usr/bin/python3 from selenium import webdriver import time import re import importl ...
- python+selenium+requests爬取qq空间相册时遇到的问题及解决思路
最近研究了下用python爬取qq空间相册的问题,遇到的问题及解决思路如下: 1.qq空间相册的访问需要qq登录并且需是好友,requests模块模拟qq登录略显麻烦,所以采用selenium的dri ...
- selenium爬取qq空间,requests爬取雪球网数据
一.爬取qq空间好友动态数据 # 爬取qq空间好友状态信息(说说,好友名称),并屏蔽广告 from selenium import webdriver from time import sleep f ...
- Python_小林的爬取QQ空间相册图片链接程序
前言 昨天看见某人的空间有上传了XXXX个头像,然后我就想着下载回来[所以本质上这是一个头像下载程序],但是一个个另存为太浪费时间了,上网搜索有没有现成的工具,居然要注册码,还卖45一套.你们的良心也 ...
- python selenium爬取QQ空间方法
from selenium import webdriver import time # 打开浏览器 dr = webdriver.Chrome() # 打开某个网址 dr.get('https:// ...
- Python爬虫实战一之爬取QQ音乐
一.前言 前段时间尝试爬取了网易云音乐的歌曲,这次打算爬取QQ音乐的歌曲信息.网易云音乐歌曲列表是通过iframe展示的,可以借助Selenium获取到iframe的页面元素, 而QQ音乐采用的是 ...
- 手把手教你使用Python抓取QQ音乐数据(第一弹)
[一.项目目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. [二.需要的库] 主要涉及的库有:requests.json ...
- 手把手教你使用Python抓取QQ音乐数据(第二弹)
[一.项目目标] 通过Python爬取QQ音乐数据(一)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 此次我们在之前的基础上获取QQ音乐指定歌曲的歌词及前15个精 ...
- Python爬虫使用selenium爬取qq群的成员信息(全自动实现自动登陆)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: python小爬虫 PS:如有需要Python学习资料的小伙伴可以 ...
随机推荐
- 6.Git内容修改之后的查看和提交
我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容: Git is a distributed version c ...
- Weblogic的安装与配置
安装准备 下载WebLogic10.2 for x86 linux安装文件: 安装RHEL 5.4: 检查Linux环境,确保安装目录所在的文件系统空闲空间在2G以上.如果空间不足,则应扩展root ...
- JS_MediaPlayer类
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/T ...
- ubuntu14.04设置静态ip
1. 找到文件并作如下修改: sudo vim /etc/network/interfaces 修改如下部分: auto eth0 iface eth0 inet static address 192 ...
- MySQL免安装数据库配置-Windows8.1
1. 解压Mysql压缩包,将包中my-default.ini复制一份,改名为my.ini,添加一下配置信息到my.ini: [client] port=3306 default-character- ...
- ajax动态添加的li不能绑定click事件
单纯的给li标签添加click事件,是不会执行的. 经过试验 <ul id="searchedUser"><li>搜索结果</li></u ...
- const、static和extern的正确使用方式
我们在看一些大牛的第三方时,里面会出现很多const.static和extern,尤其是const和static,const和extern的结合使用,直接令很多小伙伴懵逼了,今天就详细讲解一下这三个关 ...
- mybatis foreach的使用
foreach标签在批量插入数据库时非常方便,但是很容易出错,我没有注意括号的位置让我折腾了一个半小时找问题,醉醉哒,所以在这里记录一下foreach的使用. 首先,这是insert批量插入正确的代码 ...
- 一篇说尽Excel常见函数用法
一篇说尽Excel常见函数用法 Word,PPT,Excel这三个Office软件是职场办公里最常用的三个软件,但是我发现简书上写PPT的教程多,Excel的少,即使有,也是零零散散.因为Excel的 ...
- 3.密码pasuwado————记第一次超越Candy?
激动人心的2016.11.4模拟赛结束了 更激动人心的是我得了90分,第一次超越豪哥,特立文纪念. 3.密码 [问题描述] 哪里有压迫,哪里就有反抗. moreD的宠物在法庭的帮助下终于反抗了.作为一 ...