觉得微博手动点赞太过麻烦?
其实自动点赞的实现并不困难!

本篇会有Cookie、session和token方面的知识,不太了解的可以先看下《做web开发,怎么能不懂cookie、session和token呢?》

我们先通过前两个小节大概了解一下我们Python登录微博的原理,然后第三小节就会跟大家介绍微博自动点赞的代码。

目录

  • 一、实现登陆微博功能
  • 二、实现发送微博
  • 三、实现微博自动点赞

一、实现登陆微博功能

首先进入微博页面后按F12打开开发者工具,将如图的按钮点击后,在浏览器中手动登陆一次,在Network 标签的XHR类型中找到Login请求标签,在Form data下我们可以看到username(用户名)和password(密码),并知道了请求方式是POST,请求的参数有很多我们直接照搬就是。

网页截图↓

这时,可能学过一些爬虫的同学便会直接上手写出如上雷同的代码,但发现出不来结果

会报错的代码↓

import requestsheaders = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like             Gecko) Chrome/76.0.3809.132 Safari/537.36'}
login_data = {'username': '你的用户名','password': '你的密码','savestate': '1','r': 'https://m.weibo.cn/?jumpfrom=weibocom','ec': '0','pagerefer': 'https://m.weibo.cn/login?backURL=https%253A%252F%252Fm.weibo.cn%252F%253Fjumpfrom%253Dweibocom','entry': 'mweibo','wentry': '','loginfrom': '','client_id': '','code': '','qq': '','mainpageflag': '1','hff': '','hfp': '',}
login_req = requests.post('https://passport.weibo.cn/sso/login', data=login_data, headers=headers)
print(login_req.status_code)

这是因为有些网站并不只是按照’user-agent’判断用户的正常访问的。那我们还需点开Request Headers(请求头)检查可能还有什么字段会用来判断用户正常访问

一般 referer(请求来源页面)、origin(谁发起的请求)、host(主机名及端口号) 字段也常被用于反爬虫,当我们的爬虫无法正常获取数据时,我们可以将请求头里的这些字段照搬进去试试。经过验证,微博网页是以referer 来判断是否是用户正常访问。最后我们还可以把Cookie放进代码里,这样就不用在代码里输入账号密码了。

要注意Cookie并不是永久有效的,若发现自动登录失败,可以重新上网页把新的Cookie复制下来更换

完整的代码如下↓

import requestsheaders = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36','referer': 'https://passport.weibo.cn/signin/login?  entry=mweibo&res=wel&wm=3349&r=https%3A%2F%2Fm.weibo.cn%2F%3Fjumpfrom%3Dweibocom','cookie': '你的cookie'}login_data = {'savestate': '1','r': 'https://m.weibo.cn/?jumpfrom=weibocom','ec': '0','pagerefer': 'https://m.weibo.cn/login?backURL=https%253A%252F%252Fm.weibo.cn%252F%253Fjumpfrom%253Dweibocom','entry': 'mweibo','wentry': '','loginfrom': '','client_id': '','code': '','qq': '','mainpageflag': '1','hff': '','hfp': '',}
login_req = requests.post('https://passport.weibo.cn/sso/login', data=login_data, headers=headers)
print(login_req.status_code)    #输出200则代表登录成功

二、实现发送微博

既然都登陆微博了,我们先试试能不能顺便发微博吧

同样的,在微博编辑页面点击F12进入开发者工具,我们先试试发送一个微博,Network标签会出现什么新的内容吧

网页截图↓


当微博界面点击发送之后,Network标签就会出现update的请求,点进去可以看到,请求地址是https://m.weibo.cn/api/statuses/update,请求方法是 POST。参数有两个一个是content 也就是发送的微博内容,另一个是st,这里的st通过几次的检验,猜测应该是网站的反爬虫措施。这里获得st的方法是通过同为Network标签下的config请求,里面存放了st值,我们将 JSON 格式的字符串转换为字典,然后取到 st 的值

方法↓

config_req = session.get('https://m.weibo.cn/api/config')
config = config_req.json()
st = config['data']['st']
print(st)   #每隔一段时间st值会改变

登录和发送微博的完整代码如↓

import requestsheaders = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36','referer': 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=https%3A%2F%2Fm.weibo.cn%2F%3Fjumpfrom%3Dweibocom','cookie': '你的cookie'}login_data = {'savestate': '1','r': 'https://m.weibo.cn/?jumpfrom=weibocom','ec': '0','pagerefer': 'https://m.weibo.cn/login?backURL=https%253A%252F%252Fm.weibo.cn%252F%253Fjumpfrom%253Dweibocom','entry': 'mweibo','wentry': '','loginfrom': '','client_id': '','code': '','qq': '','mainpageflag': '1','hff': '','hfp': '',}# 使用 session来保留登录状态
session = requests.Session()
session.headers.update(headers)
login_req = session.post('https://passport.weibo.cn/sso/login', data=login_data)# 获取 st 请求
config_req = session.get('https://m.weibo.cn/api/config')
config = config_req.json()
st = config['data']['st']compose_data = {'content': input("请输入发送的内容:"),,'st': st
}
compose_req = session.post('https://m.weibo.cn/api/statuses/update', data=compose_data)
print(compose_req.json())   # 输出:{'ok': 1, 'data': 省略部分内容...}

调整结构后的代码(功能一样)如↓

import requestsclass WeiboSpider:def __init__(self):self.session = requests.Session()self.headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36','referer': 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=https%3A%2F%2Fm.weibo.cn%2F%3Fjumpfrom%3Dweibocom','cookie': '你的Cookie'}self.session.headers.update(self.headers)def login(self):login_data = {'savestate': '1','r': 'https://m.weibo.cn/?jumpfrom=weibocom','ec': '0','pagerefer': 'https://m.weibo.cn/login?backURL=https%253A%252F%252Fm.weibo.cn%252F%253Fjumpfrom%253Dweibocom','entry': 'mweibo','wentry': '','loginfrom': '','client_id': '','code': '','qq': '','mainpageflag': '1','hff': '','hfp': '',}self.session.post('https://passport.weibo.cn/sso/login', data=login_data)def get_st(self):config_req = self.session.get('https://m.weibo.cn/api/config')config = config_req.json()st = config['data']['st']return stdef compose(self, content):compose_data = {'content': content,'st': self.get_st()}compose_req = self.session.post('https://m.weibo.cn/api/statuses/update', data=compose_data)print(compose_req.json())def send(self, content):self.login()self.compose(content)weibo = WeiboSpider()
weibo.send(input("请输入发送的内容:"))

三、实现微博自动点赞

完整的代码↓

import requestsclass WeiboSpider:def __init__(self):self.session = requests.Session()self.headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36','referer': 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=https%3A%2F%2Fm.weibo.cn%2F%3Fjumpfrom%3Dweibocom','cookie': '你的cookie'}self.session.headers.update(self.headers)def login(self):login_data = {'savestate': '1','r': 'https://m.weibo.cn/?jumpfrom=weibocom','ec': '0','pagerefer': 'https://m.weibo.cn/login?backURL=https%253A%252F%252Fm.weibo.cn%252F%253Fjumpfrom%253Dweibocom','entry': 'mweibo','wentry': '','loginfrom': '','client_id': '','code': '','qq': '','mainpageflag': '1','hff': '','hfp': '',}self.session.post('https://passport.weibo.cn/sso/login', data=login_data)def get_st(self):config_req = self.session.get('https://m.weibo.cn/api/config')config = config_req.json()st = config['data']['st']return stdef compose(self, content):compose_data = {'content': content,'st': self.get_st()}compose_req = self.session.post('https://m.weibo.cn/api/statuses/update', data=compose_data)print(compose_req.json())def send(self, content):self.login()self.compose(content)# 获取微博列表def get_weibo_list(self):params = {'type': 'uid','value': '2139359753', 'containerid': '1076032139359753'}weibo_list_req = self.session.get('https://m.weibo.cn/api/container/getIndex', params=params)weibo_list_data = weibo_list_req.json()weibo_list = weibo_list_data['data']['cards']return weibo_list# 点赞微博def vote_up(self, id):vote_up_data = {'id': id,  # 要点赞的微博 id'attitude': 'heart','st': self.get_st()}vote_up_req = self.session.post('https://m.weibo.cn/api/attitudes/create', data=vote_up_data)json = vote_up_req.json()print(json['msg'])# 批量点赞微博def vote_up_all(self):self.login()weibo_list = self.get_weibo_list()for i in weibo_list:# card_type 为 9 是正常微博if i['card_type'] == 9:self.vote_up(i['mblog']['id'])weibo = WeiboSpider()
weibo.vote_up_all()

谢谢大家,Python的分享就到此为止,以后如果有好玩的Python程序,我还会继续向大家分享的。

接下来我会开始移动开发方面的学习了,博客的主方向以后就会关于这方面展开,有需要的同学可以关注并了解一下。

Python简单实现微博自动点赞相关推荐

  1. python 微博自动点赞软件_Python微博工具人,每日一句英语自动发

    原标题:Python微博工具人,每日一句英语自动发 关注 来源 | 萝卜大杂烩(ID:luobodazahui) 如若转载请联系原公众号 最近在研究用 Python 来制作各个类别的机器人,今天先来分 ...

  2. python爬取微博评论点赞数_python 爬虫 爬微博 分析 数据

    python 爬虫 爬微博分析 数据 最近刚看完爱情公寓5,里面的大力也太好看了吧... 打开成果的微博,小作文一样的微博看着也太爽了吧... 来 用python分析分析 狗哥这几年微博的干了些啥. ...

  3. 用Python实现某点评自动点赞

    文章目录 前言 一.准备工作 二.思路分析 1.获取cookie 2.打开粉丝列表 3.互粉 4.点赞 5.翻页 三.代码实现 总结 前言 想用Python做个某点评的自动点赞互粉功能,毕竟手点太浪费 ...

  4. python+selenium h5新浪微博自动点赞

    同样采用h5版页面进行自动化点赞 update0:微博会莫名其妙取消掉点过的赞图标,但是赞的内容还在,没办法先取消了,只点别人没点过赞的微博 update1:加入了try except和一个浏览器刷新 ...

  5. python 微博自动点赞_用 Python 自动定时发微博

    ​其实小帅b已经挺久没有玩微博了,记得上次玩微博还是为了给周杰伦打榜,不过最近心血来潮,觉得俺的微博账号躺着也是躺着,要不就用 Python 做一个自动定时发微博的机器人,让它在上面飘一会. 怎么个飘 ...

  6. Python selenium实现微博自动登录

    (一)编程环境 操作系统:Win 10 编程语言:Python 3.6 (二)安装selenium 这里使用selenium实现. 如果没有安装过python的selenium库,则安装命令如下 pi ...

  7. python+selenium h5QQ空间自动点赞器

    h5的页面要清爽很多,也方便查找 测试环境是macOS+python3+anaconda update:会出现页面什么都没有的情况,已更新 #qzone like robot import time ...

  8. python爬取微博评论点赞数_Python selenium爬取微博数据代码实例

    爬取某人的微博数据,把某人所有时间段的微博数据都爬下来. 具体思路: 创建driver-–get网页--找到并提取信息-–保存csv--翻页--get网页(开始循环)-----没有"下一页& ...

  9. 用python 实现朋友圈自动点赞

    使用该程序只是为了熟悉pyautogui模块的应用,不是所有圈文该点赞的,请读者慎用! 我们需要pyautogui模块,pyautogui是一个纯Python的GUI自动化工具,通过它可以让程序自动控 ...

  10. python爬取微博评论点赞数_python爬取点赞评论数

    马上注册,结交更多好友,享用更多功能^_^ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 清歌终南 于 2018-3-24 22:35 编辑 看了小甲鱼老师的爬取网易云音乐热门评 ...

最新文章

  1. pandas使用idxmax函数获取dataframe每个数据行中最大值对应的列名称(column label of max value in each row in dataframe)
  2. linuxtar.gz安装方法
  3. js文件的装载和执行
  4. 调试了半天,全都是复制代码惹得祸!
  5. JAVA命令运行cmd命令得到的结果乱码Runtime.getRuntime().exec();
  6. Android 是移动世界的鸭嘴兽
  7. 云信小课堂|搭建应用级别在线聊天室,7步就够了!
  8. 100%你没见过的魔兽表情包,拿去!再扯情怀已俗!
  9. HBuilder设置代码自动换行的方法
  10. php数据库图片读取不出来,图片显示不出来,但是数据库里有显示
  11. 2篇word文档比较重复率_继续教育 | 你该知道的论文小技巧——重复率检测
  12. openssl不是内部或外部命令_OpenSSL新架构蓝图
  13. Google 发布图片配对基准及挑战:从系列图像重建三维物体和建筑物
  14. Word中如何保证正文首行缩进其他标题不动
  15. 【原创】轻量级移动端即时通讯技术 MobileIMSDK 发布了
  16. 符号_液压图形符号识别之减压阀符号原理
  17. 使用百度图像识别时,提示错误“No address associated with hostname”
  18. DCGAN生成动漫人物头像---pytroch版
  19. 金盘转债上市价格预测
  20. 2016-03-30 作业 朱宇飞

热门文章

  1. 详细的LaTex语法
  2. 数据结构-第二章(1)-线性结构
  3. windows 安装apex_《Apex英雄》:如何在你的PC上下载安装玩到它
  4. 基于java的药品库房管理系统
  5. turnserver开机启动配置
  6. turn.js (翻页效果)总结
  7. 一个前端程序员的费曼技巧练习
  8. 用matlab编程怎么做,Matlab教程 Matlab入门图文教程
  9. 惠普服务器做虚拟化,节省成本立竿见影 惠普虚拟化技术详解
  10. Qt 中Socket编程实例