风也温柔

计算机科学知识库

分享到微博前端实现 python教程分享Python编程实现简单的微博自动点赞

  目录

  觉得微博手动点赞太过麻烦?

  其实自动点赞的实现并不困难!

  本篇会有、和token方面的知识,不太了解的可以先看下

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

  一、实现登陆微博功能

  首先进入微博页面后按f12打开开发者工具,将如图的按钮点击后,在浏览器中手动登陆一次分享到微博前端实现 python教程分享Python编程实现简单的微博自动点赞,在 标签的xhr类型中找到login请求标签,在form data下我们可以看到(用户名)和(密码),并知道了请求方式是post,请求的参数有很多我们直接照搬就是。

  网页截图

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

  会报错的代码

  <pre> import requests 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' } 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) </pre>

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

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

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

  完整的代码如下

  <pre> import requests 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' } 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则代表登录成功 </pre>

  二、实现发送微博

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

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

  网页截图

  当微博界面点击发送之后,标签就会出现的请求,点进去可以看到,请求地址是,请求方法是 post。参数有两个一个是 也就是发送的微博内容分享到微博前端实现,另一个是st,这里的st通过几次的检验,猜测应该是网站的反爬虫措施。这里获得st的方法是通过同为标签下的请求,里面存放了st值,我们将 json 格式的字符串转换为字典,然后取到 st 的值

  方法

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

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

  <pre> import requests 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' } 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' 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': 省略部分内容...} </pre>

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

  <pre> import requests class 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' return st def 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("请输入发送的内容:")) </pre>

  三、实现微博自动点赞

  完整的代码

  <pre> import requests class 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' return st def 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' 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') weibo = weibospider() weibo.vote_up_all() </pre>

  谢谢大家分享到微博前端实现,的分享就到此为止,以后如果有好玩的程序,我还会继续向大家分享的,希望大家以后多多支持!

  需要了解更多教程分享编程实现简单的微博自动点赞,都可以关注教程分享栏目—234IT()

  文章来源:https://234it.com/pytoh/67464.html