讲真的,我在写这个脚本的时候,我还没把python的基本语法都了解了。我只能说,语言不重要,好用就行。。。

至于为什么想删QQ动态,只是不想老是看到那年今日那些曾经发的很幼稚的话,动态又多(虽然这几年已经不用QQ了),用手太费劲,就想写个脚本自动处理了。

要想删除所有动态,我需要做2件事:

1. 获取所有的动态信息

2. 获取删除的url,遍历已经获取的所有动态,然后全部删除了就行。

另外,这有一个大前题:需要先获取到会话信息。这个简单,毕竟是自己的QQ,直接登录然后,浏览器上什么不都有了。

当然,这说起来简单,做起来嘛。。。。。。。也挺简单。

我本来是想用shell解决的,后来抓下动态信息,发现是个json。我想了想,觉得python应该好用点(赶紧先用俩小时研究下python语法)。

下面开始了:

1. 登录QQ空间,点击说说,首先要找到可以获取动态信息列表的url。这里我就直说我的分析结果了,在动态下面有个页码,点击的时候的url就是,下面给个示例:

https://h5.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?uin=763795151&inCharset=utf-8&outCharset=utf-8&hostUin=763795151&notice=0&sort=0&pos=840&num=20&cgi_host=http%3A%2F%2Ftaotao.qq.com%2Fcgi-bin%2Femotion_cgi_msglist_v6&code_version=1&format=jsonp&need_private_comment=1&g_tk=635656033&qzonetoken=8f1208fd31ba56f14fb6f71f498501c179fde08e0a6866589e12672dc8fe8c2af00b924c63f35c

大概就是上面这个样子,里面有两个参数,pos:从第几条开始,num:获取几条。需要的时候调整这两个参数的值即可。

然后,把这个url在浏览器上发个请求,我用的谷歌。然后把请求头、cookie等信息都拿出来。根据pos和num的值就可以获取到动态信息。返回的结果是一个字符串,掐头去尾就剩中间的部分就是个Json字符串了。我已经删除完了,也不给示例了,我直接描述这个字符串了,这个json串中有个字段msglist是个列表,可能为空,在不空的时候,每个值有个字段是tid,tid的值就是我们删除这条动态的时候需要用的一个查询参数。把每条动态的tid保存起来,后面遍历删除即可。

2. 获取删除的url。这个操作很简单,删除一个,然后把删除的请求信息拿出来就行(查看浏览器)。这个是个post方法,拿到删除时候用到的url、请求头、cookie、请求参数。然后配置好。

3. 遍历1中获取的所有tid,然后设置每个tid为要删除的请求中参数,依次删除即可。

倒是不复杂,没多少技术含量。下面贴下我的实现,毕竟第一次用python,也不知道姿势对不对。

代码:

#! /usr/bin/pythonimport requests
import re
import json#总共要删除的动态数
total=840
limit=10
pages=total/limit
start_pos=2
tids=[]
#文中说的掐头去尾就是json,所以这里用个正则处理
pattern=re.compile(r'^_Callback\((.*)\);$')
#获取所有动态的tid
cookie="换成自己浏览器中的cookie信息"
#请求头
request_headers={'authority':'h5.qzone.qq.com','method':'GET','path':'/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?uin=763795151&inCharset=utf-8&outCharset=utf-8&hostUin=763795151&notice=0&sort=0&pos=820&num=40&cgi_host=http%3A%2F%2Ftaotao.qq.com%2Fcgi-bin%2Femotion_cgi_msglist_v6&code_version=1&format=jsonp&need_private_comment=1&g_tk=1874324779&qzonetoken=98cd2ff9067f620f90a72cbe07da56012b4593659ebbf1deba0b350e82d53be364cd48d038e7ca','scheme':'https','accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3','accept-language':'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7','cache-control':'max-age=0','cookie':cookie, 'upgrade-insecure-requests':'1'}
def getTids(say_list_url):res=requests.get(say_list_url, headers=request_headers)text=pattern.findall(res.text)[0]resolveTid(text)print "tid len: %d" % (len(tids))def resolveTid(text):jsonObj=json.loads(text)if  not jsonObj.has_key('msglist') :print textreturn Falsemsglist=jsonObj['msglist']if  msglist is None :return Falsefor msg in msglist:print "tid: %s" % (msg['tid'])tids.append(msg['tid'])for page in range(pages):num=limit*page#动态设置pos和num值来获取所有的说说信息say_list_url="https://h5.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?uin=763795151&inCharset=utf-8&outCharset=utf-8&hostUin=763795151&notice=0&sort=0&pos=%d&num=%d" % (start_pos+num, limit) + "&cgi_host=http%3A%2F%2Ftaotao.qq.com%2Fcgi-bin%2Femotion_cgi_msglist_v6&code_version=1&format=jsonp&need_private_comment=1&g_tk=1168850316&qzonetoken=87520ec2a71a9f349d23d7e462ffdef0bc3075786bc42114239de62af56e92ca85ccb2eb098144" getTids(say_list_url)print "total: %d" % (len(tids))
print "start delete..."#删除说说的url,换成自己的
delete_url="https://user.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_delete_v6?qzonetoken=fc557d5f5542fbb951479b8e8b2f1a0f163db952eb44cef275261b76b758edeb51c34834c16f80&g_tk=597814207"
delete_cookie="换成自己的浏览器的cookie"
#换成自己的
delete_headers={'authority':'user.qzone.qq.com','method':'POST','path':'/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_delete_v6?qzonetoken=9a40f79cdd9908ccbd41466b3b2276314f155525357ae4fb8a7d90093f6379e5144d31eefeabc6&g_tk=597814207','scheme':'https','accept':'*/*','accept-language':'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7','content-length':'178','content-type':'application/x-www-form-urlencoded;charset=UTF-8','origin':'https://user.qzone.qq.com','referer':'https://user.qzone.qq.com/763795151/311', 'cookie': delete_cookie, 'user-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Mobile Safari/537.36'}
body={'hostuin':'763795151','t1_source':'1','code_version':'1','format':'fs','qzreferrer':'https://user.qzone.qq.com/763795151/311','tid':''}
for tid in tids:body['tid']=tidprint bodydr=requests.post(delete_url, data=body, headers=delete_headers)print dr

如果会话信息太久失效了,就重新登录更新下,做web都明白这个。如果出现403,那就是配置不正确,确认请求头、cookie、url都不要复制错了。

这算是我用python写的第一个程序了。

用python写个脚本把QQ空间多年动态删了相关推荐

  1. python爬取网页版QQ空间,生成词云图、柱状图、折线图(附源码)

    python爬取网页版QQ空间,生成词云图.柱状图.折线图 最近python课程学完了,琢磨着用python点什么东西,经过一番搜索,盯上了QQ空间,拿走不谢,欢迎点赞收藏,记得github给个sta ...

  2. python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

    python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库 准备阶段 在正式开始在前需要先准备好做爬虫的工具,本例使用chrome无头浏览器进行爬取工作,也可使用 ...

  3. 使用vb脚本实现QQ空间相册好友查验功能

    使用vb脚本实现QQ空间相册好友查验功能 1.思路 a.需要创建一个变量(执行方法) b.需要使用输入框方法,用来接受用户输入的内容 c.给予用户输入的内容进行判断 d.当判断结果为true时,弹出一 ...

  4. python爬取加密qq空间_使用python+selenium爬取qq空间好友动态

    使用python+selenium爬取qq空间好友动态 分析过程如下: 要想用selenium登陆qq空间,必须点击账号密码登陆按钮然后再填写账号密码登陆. 1.PNG 点击账号密码按钮后跳转到如下页 ...

  5. 用python写自动化测试脚本常用功能:结果记录,运行日志,测试配置,带颜色打印在控制台

    用python写自动化测试脚本常用功能:结果记录,运行日志,测试配置,带颜色打印在控制台 利用csv库来记录测试结果 利用logging库来记录脚本运行信息 利用ConfigParser库来读取测试配 ...

  6. Python写阴阳师脚本带GUI又是一个学习小技巧

    Python写阴阳师脚本带GUI 需要用到环境 Python3. pycharm.天天模拟器.阴阳师. 准备库 pip install pyautogui pip install pywin32 需要 ...

  7. python写的游戏怎么给别人玩-用python写游戏脚本原来这么简单

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

  8. python游戏最简单代码-用python写游戏脚本原来这么简单

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

  9. python写安卓游戏_10分钟学会python写游戏脚本!Python其实很简单

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

  10. 如何用python写游戏脚本?

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后 ...

最新文章

  1. 5G、物联网和AI结合的究极形态是什么?一文看尽智能连接在5大领域的12个典型案例!...
  2. ionic3中使用自定义配置
  3. SM32的USART串口设置
  4. 机器学习Sklearn实战——极限森林、梯度提升树算法
  5. RabbitMQ(一)helloworld
  6. 阿里云ECS——Linux连接错误[Read from socket failed: Connection reset by peer]解决方案
  7. 减少C++编译时间的方法
  8. linux 进程间通信之pipe
  9. 浅谈ICMP Flood***原理
  10. 讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute
  11. HTML饼状图中心添加文字,echarts饼状图环形中间动态文字
  12. 语言中要输出表格_C语言 | 表格输出若干人的信息
  13. 【BZOJ28431180】极地旅行社,LCT练习
  14. 【英语学习】【Level 07】U01 Making friends L5 A friend for a day
  15. 电脑控制Android设备的软件——Total Control
  16. 移动磁盘此卷不包含可识别的文件系统要怎么找到数据
  17. Minix的系统调用
  18. POJ2255 Tree Recovery 前序 中序求后序
  19. 路由器上下行测试软件,无线传输性能测试平台和测试方法
  20. 百度快照劫持代码的更新

热门文章

  1. Java 下数据业务逻辑开发技术 JOOQ 和 SPL
  2. 创建自己的WordPress主题的三种方法
  3. C++类的构造函数及操作符()重载
  4. iPad的尺寸与分辨率
  5. 5个最优秀的Java和C#代码转换工具
  6. EXFAT文件系统DBR的完美恢复
  7. STM32学习——直接存储器访问(DMA)
  8. 不存在从“——”到“——*”的适当转换函数—已解决
  9. 栈帧 stack frame
  10. ISA TEST黑客过关小游戏第二关解密