模块:selenium,pyquery,json,time
使用的是:Chrome
遇到的问题:

  1. 模拟点击下一页操作,需要换方式。
  2. 遇到元素在frame,需要进入查找。

对空间的登陆进行分析

进入网址:https://i.qq.com/
说说地址:https://user.qzone.qq.com/{qq}/311

我模拟点击这个头像,也可以点击账号密码登陆,然后填充。
对头像点击右键检查审查元素

我们可以模拟点击这个标签的id进行模拟操作

        url = f'https://user.qzone.qq.com/{qq}/311'browser.get(url)try:browser.find_element(By.NAME, 'login_frame')  # 发现登陆的frameexcept:raiseelse:try:browser.switch_to_frame('login_frame')  # 发现之后进入login_framelogin = wait.until(EC.element_to_be_clickable((By.ID, 'img_out_1290259791')))  # 获取点击按钮  也可以进行输入账号密码login.click()  # 进行点击except Exception as e:raisetime.sleep(2)

在模拟登陆的时候:

  1. 直接寻找这个By.ID,img_out_1290259791是查找不到的,因为他在frame里面,所以browser.find_element(By.NAME, ‘login_frame’)进行判断发现。
  2. 然后再进入 browser.switch_to_frame(‘login_frame’)
  3. 然后才是模拟点击登陆

对说说进行分析

思路是:首先寻找说说有几页,然后在进行每页的跳转


这里就是说说的内容,发现这里也是一个frame,所以要进入,然后判断说说有几页。

browser.switch_to_frame('app_canvas_frame')  # 进入switch_to_framepage_last = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#pager_last_0 > span'))).text  # 最后一页return int(page_last)

对说说内容进行分析

def get_page_text(n):try:doc = pq(browser.page_source)           # 获取页面的htmlitems = doc('#msgList > li.feed').items()          # 获取所有的说说for item in items:      # 对说说进行分开yield {'time': item.find('div.box.bgr3 > div.ft > div.info > .c_tx3 > .c_tx').text(),'text': item.find('.content').text().lstrip('♡\n')}text = wait.until(EC.presence_of_element_located((By.ID, f'pager_go_{n-1}')))   # 获取跳转页的输入框text.send_keys(n+1)     # 输入下一页text.send_keys(Keys.ENTER)      #进行确定except:browser.close()

一开始模拟的点击下一页来进行爬去,但是遇到的问题是,

  1. 有的时候模拟点击的时候页面没有加载完毕,所以模拟点击的位置不在下一页
  2. 点击下一页了,没有跳转

所以换取了思路,进行跳转页的点击,知道了这一点以后,遇到爬页面的点击就不要模拟点击下一页了。
爬取的格式:

{"time": "12:42", "text": "一个男生如果真的爱你 无论多忙 都会腾出时间来陪你 他舍不得你胡思乱想 {uin:5289224,nick:查看全文,who:1}"}
{"time": "6:00", "text": " 我发现女孩子很容易被感动 喜欢的人说一句稍微宠溺一点的话 就开心的想把脸埋进被子里闷闷的笑出声 笑完又觉得丢脸 明明一大把年纪 还像个没爱过人的少女"}
{"time": "昨天23:07", "text": " 如果想我了 就抱抱空气吧 毕竟本可爱无处不在"}
{"time": "昨天23:07", "text": ""}
{"time": "昨天20:09", "text": "\"\"\" 他本是小小子国的质子,身份卑微,但是没关系。她喜 今夜,是她的新婚夜。 她披着凤冠霞帔,紧张又害怕。 最后她听到宫女们的声音,唤了一声驸马爷。 她知道,他来了,她的如意郎君魏君羡。欢他,喜欢这匹野马,一步步提携,最终胜任皇宫禁卫军统领,这才有资格成为她的驸马。 她从盖头的边缘看到了他的靴子,驻足在面前,却迟迟没有揭开盖头。 她正纳闷,没想到他吹熄了蜡烛,直接将她Tui到在chuang上,随后是si&che她的喜服。 嘶啦一声,她骤然一凉。 “君羡……”"}
{"time": "昨天13:47", "text": " 祝你喜欢的人恰巧也喜欢你 祝你每次考试都能有进步 祝你在下雨天时路上的空车都不拒载 祝你做过的美梦都不会忘记 祝你的心情永远像周五的下午 祝你永远活的像个孩子"}

完整的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from pyquery import PyQuery as pq
import time
import jsonoptions = webdriver.ChromeOptions()
#   设置无图模式
prefs = {'profile.default_content_setting_values': {'images': 2}
}
options.add_argument('--headless')          # 浏览器隐藏
options.add_argument('--disable-gpu')
options.add_experimental_option('prefs', prefs)        #设置无图模式
browser = webdriver.Chrome(chrome_options=options)
wait = WebDriverWait(browser, 5)def get_last_page(qq):try:url = f'https://user.qzone.qq.com/{qq}/311'browser.get(url)try:browser.find_element(By.NAME, 'login_frame')  # 发现登陆的frameexcept:raiseelse:try:browser.switch_to_frame('login_frame')  # 发现之后进入login_framelogin = wait.until(EC.element_to_be_clickable((By.ID, 'img_out_1290259791')))  # 获取点击按钮  也可以进行输入账号密码login.click()  # 进行点击except Exception as e:raisetime.sleep(2)browser.switch_to_frame('app_canvas_frame')  # 进入switch_to_framepage_last = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#pager_last_0 > span'))).text  # 最后一页return int(page_last)except Exception:get_last_page(qq)def get_page_text(n):try:doc = pq(browser.page_source)           # 获取页面的htmlitems = doc('#msgList > li.feed').items()          # 获取所有的说说for item in items:      # 对说说进行分开yield {'time': item.find('div.box.bgr3 > div.ft > div.info > .c_tx3 > .c_tx').text(),'text': item.find('.content').text().lstrip('♡\n')}text = wait.until(EC.presence_of_element_located((By.ID, f'pager_go_{n-1}')))   # 获取跳转页的输入框text.send_keys(n+1)     # 输入下一页text.send_keys(Keys.ENTER)      #进行确定except:browser.close()def write_page(page):with open('qq.txt', 'a', encoding='utf-8') as f:for page in get_page_text(page):f.write(json.dumps(page, ensure_ascii=False) + '\n')       # 将dict转换为json格式进行保存if __name__ == '__main__':page_last = get_last_page('qq')for i in range(1, page_last+1):write_page(i)browser.close()

python爬取qq空间说说相关推荐

  1. php取qq空间说说id,Python爬取qq空间说说的实例代码

    具体代码如下所示: #coding:utf-8 #!/usr/bin/python3 from selenium import webdriver import time import re impo ...

  2. python爬取qq空间锁密图片_Python3爬取QQ空间信息(下)

    |下载W3Cschool手机App,0基础随时随地学编程>>戳此了解| 导语 内容回顾: Python爬取QQ空间信息(上) 按照(上)中的安排,本期内容为抓取QQ空间的好友信息并做可视化 ...

  3. 用python爬取qq空间内容_利用Fiddler抓包和py的requests库爬取QQ空间说说内容并写入文件...

    [Python] 纯文本查看 复制代码#!C:\Program Files\Python36 python # -*- coding: UTF-8 -*- """ @au ...

  4. python爬取QQ空间好友说说并生成词云

    最近自己玩爬虫玩得很嗨.想到爬QQ空间主要是因为在看网课的时候有不少人刷弹幕要去爬前女友空间..咳咳,虽然我没有前女友,但是这不失为一个有趣的练手机会.(爬完之后发现不会留下访客记录!确实很适合爬前女 ...

  5. 通过Python爬取QQ空间说说并通过Pyechart进行可视化分析

    有一天我突然发现自己空间的说说竟然已经达到1833条,于是萌生了爬一下看看的想法(其实就是想学下python爬虫).我找了一些博客,方法不少,但是有些并不适用.所以我把真正能用的方法记录下来,并且爬取 ...

  6. 用python爬取qq空间内容_用python爬取QQ空间

    原博文 2016-11-18 17:19 − 好久没写博文了,最近捣鼓了一下python,好像有点上瘾了,感觉python比js厉害好多,但是接触不久,只看了<[大家网]Python基础教程(第 ...

  7. 看qq加密相册_用 Python 爬取 QQ 空间说说和相册

    QQ 空间在 2005 年被腾讯开发,已经经历了 15 个年头,在还没有微信的年代,看网友发表的心情.心事.照片大多都在 QQ 空间的里.它承载了80.90 后的大量青春,下面我们一起用 seleni ...

  8. 用 Python 爬取 QQ 空间说说和相册

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 君不见走马川行雪海边,平沙莽莽黄入 ...

  9. Python 爬取 QQ 空间说说和相册

    QQ 空间在 2005 年被腾讯开发,已经经历了 15 个年头,在还没有微信的年代,看网友发表的心情.心事.照片大多都在 QQ 空间的里.它承载了80.90 后的大量青春,下面我们一起用 seleni ...

最新文章

  1. python接口自动化测试框架链接数据库_python接口自动化测试框架实现之操作mysq数据库...
  2. 详细解析ASP.NET中Request接收参数乱码原理
  3. Python 中的 sys.argv 用法
  4. 机器学习笔记: Upsampling, U-Net, Pyramid Scene Parsing Net
  5. [转载]通过Arcgis Server向MXD中添加图层
  6. 安卓程序开发——创建安卓虚拟机
  7. 为脚本语言平反-JavaScript篇(3)
  8. Java将一个对象的属性值copy给另一个相同的对象
  9. Excel将多个工作簿加载到SQL Server中
  10. php评论倒序 zblog_zblogPHP评论链接加密并美化跳转的完美方法
  11. MVC仓储执行存储过程报错“未提供该参数”
  12. jsp论文参考文献(2020最新)
  13. 最牛比的NBIOT芯片MDM9206
  14. 《道德经》马王堆出土帛书版
  15. 爱代挂php源码,爱代挂外包,爱准挂外包,代挂系统218元秒搭建
  16. 网站申请服务器,网站申请服务器空间
  17. 【深度学习】计算机视觉(二)——认识和基础(下)
  18. 敏俊物联MJIOT-AMB-03 RTL8710BN 高性能wifi模块
  19. 【云原生】Docker仓库详细讲解,搭建使用 Docker Registry 私服
  20. AutoRunner 功能自动化测试项目实训之权重的修改(十五)

热门文章

  1. 2016 蓝桥杯 预选赛
  2. 木瓜移动每日资讯0618:Facebook宣布将在全球范围内推出“Instagram Reels”广告服务
  3. python空气质量分析与预测_AQI(空气质量指数)分析与预测(一)
  4. Java 11 – ChaCha20-Poly1305加密示例
  5. 国外最大的购物搜索/比较购物网站
  6. 图的广度优先搜索--python实现
  7. HDU1435 Stable Match 【稳定婚姻问题】
  8. 财务管理001-权责发生制(应收应付制)与收付实现制的区别
  9. Codeforces #308 C. Vanya and Scales
  10. 电机世界之直流无刷电机(科普文)