我们的目标是抓取qq空间里好友的说说及发表说说的时间,在开始之前先做好预备工作。

首先是先装个自动化测试工具selenium,它支持各种浏览器,在python里直接pip就可以安装了(ps:selenium主要用于动态网页,查找速度慢,解析时要注意):

pip install selenium

然后我们用selenium里面的一个webdriver工具,使用这个工具要下载对应浏览器的驱动,这里用我用的是chrome,另外驱动版本对应的浏览器版本的如下(每个notes文本里都有对应的版本):

http://npm.taobao.org/mirrors/chromedriver/

把下载好的压缩文件里的文件解压到chrome的文件夹,我们在开始之前再装个requests模块,这是爬虫必须装的模块同样,直接pip:

pip install requests

在开始写基本代码前我们先来看看现在的qq空间的网页布局。

可以看到,如果电脑登陆了qq,那么可以直接点击头像来进入qq空间,那么我们第一步就来实现进入自己的qq空间。

首先使用浏览器的f12调试工具查看这个头像框在html代码里的位置,然后获取找到它的xpath,这个比较容易看出id为img_out_ + qq号 。

对第一个网页分析完了,那么就可以开始写代码了。

from selenium import webdriverimport requests# 登陆页面
url_1 = 'https://qzone.qq.com/'a = '********'  # 自己的qq号码dri = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
dri.maximize_window()dri.get(url_1) # 自动键入网址
dri.switch_to.frame('login_frame') # 进入后先选择头像框所在的frame框架,不然获取不到元素
dri.find_element_by_xpath('//*[@id="img_out_' + a + '"]').click()

上面的代码就可以实现在已登陆qq的情况下进入自己的qq空间了,那么有另一种情况就是自己并没有登陆qq空间,那么就要进行帐号密码登陆了。

代码如下:

from selenium import webdriver
import requests# 登陆页面
url_1 = 'https://qzone.qq.com/'
a = '*******' # 自己的qq号码b = '*******'
'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
dri = webdriver.Chrome(dri.maximize_window()#键入网址
dri.switch_to.frame('login_frame') # 进入后先选择头像框所在的frame框架,不然获取不到元素
dri.get(url_1)
dri.find_element_by_xpath('//*[@id="switcher_plogin"]').click() # 选择账号密码登陆
dri.find_element_by_xpath('//*[@id="u"]').send_keys(a) # 输入账号
dri.find_element_by_xpath('//*[@id="login_button"]').click() # 登陆
dri.find_element_by_xpath('//*[@id="p"]').send_keys(b) # 输入密码

进去之后我们便开始找到“谁看过我”里的第一个好友,找到他的xpth:

然后获取他的的网址:

friend = dri.find_element_by_xpath('//*[@id="visitMeContainer"]/li[1]/a') # 找到“谁看过我”里的第一个好友,li[1]就是第一个li[2]就是第二个
friend_url = friend.get_attribute('href') # 获取他的网址

好了,开始进入好友的空间,这里:

进入之后找到目标,同样的找到说说所在的xpath,代码如下:

# 有个烦人的亲密度的弹窗
dri.find_element_by_xpath(
'//*[@id="friendship_promote_layer"]/table/tbody/tr[1]/td[2]/a').click()
# 进入说说页面
dri.find_element_by_xpath('//*[@id="QM_Profile_Mood_Cnt"]').click()

好了,到这里我们就实现了自动进入某个好友的说说了,然后开始我们的爬取。首先我们先抓取他的说说总的页数,然后我们在遍历每一页的说说,先打印出来看看效果,到这一步完整的代码如下:

from selenium import webdriver
from time import sleep
url_1 = 'https://qzone.qq.com/'
import requests# 登陆页面
b = '*********' # 密码
a = '*********'  # 自己的qq号码dri = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe') # 实例化浏览器驱动对象
dri.maximize_window() # 浏览器窗口最大化# 键入网址dri.get(url_1)dri.switch_to.frame('login_frame')  # 进入后先选择头像框所在的frame框架,不然获取不到元素
dri.find_element_by_xpath('//*[@id="p"]').send_keys(b)  # 输入密码
dri.find_element_by_xpath('//*[@id="switcher_plogin"]').click()  # 选择账号密码登陆dri.find_element_by_xpath('//*[@id="u"]').send_keys(a)  # 输入账号
friend = dri.find_element_by_xpath('//*[@id="visitMeContainer"]/li[1]/a')
dri.find_element_by_xpath('//*[@id="login_button"]').click()  # 登陆dri.switch_to.default_content()  # 登进去之后要选择回之前的framesleep(5)friend_url = friend.get_attribute('href')dri.get(friend_url)  # 进入好友空间'pager_last_0').text)  # 获取总页数
# 进入说说页面dri.find_element_by_xpath('//*[@id="QM_Profile_Mood_Cnt"]').click()sleep(3)dri.switch_to.frame('app_canvas_frame')  # 选择说说内容所在的framesleep(3)last_page = int(dri.find_element_by_id('//*[@id="msgList"]/li/div[3]/div[2]/pre')
dri.switch_to.parent_frame()  # 返回上级窗口# 开始遍历for t in range(last_page - 1):    sleep(3)    dri.switch_to.frame('app_canvas_frame')    content = dri.find_elements_by_xpath(    times = dri.find_elements_by_xpath('//*[@id="pager_next_' + str(t) + '"]').click()'//*[@id="msgList"]/li/div[3]/div[4]/div[1]/span/a')    for con, tim in zip(content, times):        print(tim.text)        print(con.text)        print('*' * 20)    sleep(3)    dri.find_element_by_xpath(dri.switch_to.parent_frame()

打印出来,ok,没问题。

爬取的内容没问题那就开始写入本地文档里:

txt_name = 'qqzone.txt'
fp = open(txt_name, 'a', encoding='utf-8') # 爬取的一些内容可能会乱码报错所以使用utf-8
fp.seek(0, 0) # 这两行代码是每次运行的时候重新定位文本内容位置然后文本内容清空
fp.truncate()

然后我们把for循环里的三行输出代码改成:

fp.write(tim.text + '\n')
fp.write(con.text + '\n')
fp.write('*' * 20 + '\n')
这样就成功把爬取的内容写在文档里了。

最后的最后,我们需要把账号密码放进ini里,先安装configparser:

pip install configparser

创建文件后缀为ini,里面写入:

[user]
a = 账号
b = 密码

创建好后,下面是完整的代码:

from selenium import webdriver
from time import sleepimport requests
import configparser# 登陆页面
url_1 = 'https://qzone.qq.com/'config = configparser.ConfigParser()
config.read('111.ini')
a = config.get('user', 'a')  # 账号
b = config.get('user', 'b')  # 密码dri = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')   # 实例化浏览器驱动对象
dri.maximize_window()    # 浏览器窗口最大化txt_name = 'qqzone.txt'
fp = open(txt_name, 'a', encoding='utf-8')  # 爬取的一些内容可能会乱码报错所以使用utf-8
fp.seek(0, 0)   # 这两行代码是每次运行的时候重新定位文本内容位置然后文本内容清空
fp.truncate()# 键入网址
dri.get(url_1)
dri.switch_to.frame('login_frame')  # 进入后先选择头像框所在的frame框架,不然获取不到元素
#登陆了qq则点击头像快速登陆,否则账号密码登陆
try:dri.find_element_by_xpath('//*[@id="img_out_' + a + '"]').click()
except:dri.find_element_by_xpath('//*[@id="switcher_plogin"]').click()  # 选择账号密码登陆dri.find_element_by_xpath('//*[@id="u"]').send_keys(a)  # 输入账号dri.find_element_by_xpath('//*[@id="p"]').send_keys(b)  # 输入密码dri.find_element_by_xpath('//*[@id="login_button"]').click()  # 登陆
sleep(5)dri.switch_to.default_content()  # 登进去之后要选择回之前的frame
sleep(5)
friend = dri.find_element_by_xpath('//*[@id="visitMeContainer"]/li[1]/a')
friend_url = friend.get_attribute('href')
dri.get(friend_url)  # 进入好友空间
sleep(5)
# 有个烦人的亲密度的弹窗
dri.find_element_by_xpath('//*[@id="friendship_promote_layer"]/table/tbody/tr[1]/td[2]/a').click()
# 进入说说页面
dri.find_element_by_xpath('//*[@id="QM_Profile_Mood_Cnt"]').click()
sleep(3)
dri.switch_to.frame('app_canvas_frame')  # 选择说说内容所在的frame
sleep(3)
last_page = int(dri.find_element_by_id('pager_last_0').text)  # 获取总页数
dri.switch_to.parent_frame()  # 返回上级窗口# 开始遍历
for t in range(last_page - 1):sleep(3)dri.switch_to.frame('app_canvas_frame')content = dri.find_elements_by_xpath('//*[@id="msgList"]/li/div[3]/div[2]/pre') # 说说的xpathtimes = dri.find_elements_by_xpath('//*[@id="msgList"]/li/div[3]/div[4]/div[1]/span/a') # 时间的xpath#写入文件for con, tim in zip(content, times):fp.write(tim.text + '\n')fp.write(con.text + '\n')fp.write('*' * 20 + '\n')sleep(3)#下一页dri.find_element_by_xpath('//*[@id="pager_next_' + str(t) + '"]').click()dri.switch_to.parent_frame()

python 用selenium获取好友空间说说及时间写入txt相关推荐

  1. python爬取qq数据_用Python爬取QQ好友空间说说进行分析

    前言: 本文涉及知识点有数据库的读写,python基础,浏览器开发者工具的使用,适用于有编程基础,了解过python的朋友阅读. 环境:PyCharm+Chrome+MongoDB Window10 ...

  2. python pc微信 接收信息_GitHub - ericadver/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...

    WechatPCAPI 微信PC版的API接口,可通过Python调用微信获取好友.群.公众号列表,并收发消息等功能.可用于二次开发在线微信机器人.微信消息监控.群控软件.开发界面作多个微信控制软件等 ...

  3. python 微信公众号网页接口调用_GitHub - micsem00/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...

    WechatPCAPI 微信PC版的API接口,可通过Python调用微信获取好友.群.公众号列表,并收发消息等功能.可用于二次开发在线微信机器人.微信消息监控.群控软件.开发界面作多个微信控制软件等 ...

  4. python的读取微信界面_GitHub - lchb000/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...

    WechatPCAPI 微信PC版的API接口,可通过Python调用微信获取好友.群.公众号列表,并收发消息,接受转账.好友请求.入群请求,群管理等功能.可用于二次开发在线微信机器人.微信消息监控. ...

  5. python 接收微信pc端_GitHub - linhuisheng/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...

    WechatPCAPI 微信PC版的API接口,可通过Python调用微信获取好友.群.公众号列表,并收发消息等功能.可用于二次开发在线微信机器人.微信消息监控.群控软件.开发界面作多个微信控制软件等 ...

  6. Python爬取QQ好友空间说说

    刚学了一点爬虫的时候,就想着去爬一下空间说说,后来在打印源码的那一步就卡住了,没有一点点防备,也没有一丝顾虑,我就这样被他拒之门外.毫无疑问这个想法瞬间就被扼杀了,完全不知道打印出来的源码为什么一点空 ...

  7. [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

    前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...

  8. python登录微信获取好友群生成列表

    直接上代码 -- coding: utf-8 -- """ Module implementing MainWindow. """ from ...

  9. python 时间表_python获取起止日期段中的时间列表

    if __name__ == "__main__": print get_date_list('2018-01-01', '2018-02-28') 为了调用datetime等这些 ...

最新文章

  1. MPLS标签分发、通告及管理方式
  2. 【Matlab 控制】利用 Matlab Function 绘制分段函数
  3. hibernate教程--常用配置和核心API详解
  4. 12_Android中HttpClient的应用,doGet,doPost,doHttpClientGet,doHttpClient请求,另外借助第三方框架实现网络连接的应用,
  5. mac vim python3_VIM学习笔记 编译源码(Compile Code)-Python
  6. mysql hash分区 创建_如何建mysql hash数据库分区
  7. 程序员菜鸟到高手的11个阶段,你处于哪个阶段?
  8. mysql 要完 知乎_必知必会 MySQL笔记(未完)
  9. Max Script|修改器篇
  10. 2022年熔化焊接与热切割题库
  11. 【许晓笛】 EOS智能合约案例解析(1) 1
  12. iphone二手机在哪里回收比较好(哪里回收的价格最高)
  13. 评测酷睿i5 12500h和i7 12650h差多少 i512500h和i712650h对比
  14. 保送清华计算机,高二学霸保送清华,怎么做到的?
  15. 平面设计师经常去的网站——设计灵感类
  16. android 5.0关闭加密,谷歌放宽Android 5.0系统全盘加密限制
  17. 不看会后悔系列之好看又好用的样机模板推荐!
  18. Omni协议PHP开发包
  19. 使用Display Tag
  20. 在网站页脚添加QQ邮箱的“邮我”功能

热门文章

  1. MR详细运行原理及过程
  2. Office 2016零售版转换为VOL版本
  3. Android自定义控件增加xml标签属性、取值等
  4. OTA 升级中的跟文件系统切换
  5. 【Java、Redis】通过中心经纬度与半径获取范围内的结果集(类似附近的人)
  6. 洛谷P2698 Flowerpot S
  7. js中的trim函数怎么使用
  8. C#操作Excel表
  9. 传《斗战神》美术创作婉拒暴雪挖角 中国游戏人缺少这份傲骨
  10. java的八种基本数据类型