一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python編程實(shí)現(xiàn)簡單的微博自動點(diǎn)贊

Python編程實(shí)現(xiàn)簡單的微博自動點(diǎn)贊

2022-02-16 00:10HuiSoul Python

這篇文章主要為大家介紹了Python編程實(shí)現(xiàn)簡單的微博自動點(diǎn)贊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

覺得微博手動點(diǎn)贊太過麻煩?
其實(shí)自動點(diǎn)贊的實(shí)現(xiàn)并不困難!

本篇會有Cookie、session和token方面的知識,不太了解的可以先看下

web前端cookie session及token會話機(jī)制詳解

我們先通過前兩個小節(jié)大概了解一下我們Python登錄微博的原理,然后第三小節(jié)就會跟大家介紹微博自動點(diǎn)贊的代碼。

 

一、實(shí)現(xiàn)登陸微博功能

首先進(jìn)入微博頁面后按F12打開開發(fā)者工具,將如圖的按鈕點(diǎn)擊后,在瀏覽器中手動登陸一次,在Network 標(biāo)簽的XHR類型中找到Login請求標(biāo)簽,在Form data下我們可以看到username(用戶名)和password(密碼),并知道了請求方式是POST,請求的參數(shù)有很多我們直接照搬就是。

網(wǎng)頁截圖

Python編程實(shí)現(xiàn)簡單的微博自動點(diǎn)贊

這時,可能學(xué)過一些爬蟲的同學(xué)便會直接上手寫出如上雷同的代碼,但發(fā)現(xiàn)出不來結(jié)果

會報錯的代碼

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)

這是因為有些網(wǎng)站并不只是按照"user-agent"判斷用戶的正常訪問的。那我們還需點(diǎn)開Request Headers(請求頭)檢查可能還有什么字段會用來判斷用戶正常訪問

Python編程實(shí)現(xiàn)簡單的微博自動點(diǎn)贊

一般 referer(請求來源頁面)、origin(誰發(fā)起的請求)、host(主機(jī)名及端口號) 字段也常被用于反爬蟲,當(dāng)我們的爬蟲無法正常獲取數(shù)據(jù)時,我們可以將請求頭里的這些字段照搬進(jìn)去試試。經(jīng)過驗證,微博網(wǎng)頁是以referer 來判斷是否是用戶正常訪問。最后我們還可以把Cookie放進(jìn)代碼里,這樣就不用在代碼里輸入賬號密碼了。

要注意Cookie并不是永久有效的,若發(fā)現(xiàn)自動登錄失敗,可以重新上網(wǎng)頁把新的Cookie復(fù)制下來更換

完整的代碼如下

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則代表登錄成功

 

二、實(shí)現(xiàn)發(fā)送微博

既然都登陸微博了,我們先試試能不能順便發(fā)微博吧

同樣的,在微博編輯頁面點(diǎn)擊F12進(jìn)入開發(fā)者工具,我們先試試發(fā)送一個微博,Network標(biāo)簽會出現(xiàn)什么新的內(nèi)容吧

網(wǎng)頁截圖

Python編程實(shí)現(xiàn)簡單的微博自動點(diǎn)贊

Python編程實(shí)現(xiàn)簡單的微博自動點(diǎn)贊

當(dāng)微博界面點(diǎn)擊發(fā)送之后,Network標(biāo)簽就會出現(xiàn)update的請求,點(diǎn)進(jìn)去可以看到,請求地址是https://m.weibo.cn/api/statuses/update,請求方法是 POST。參數(shù)有兩個一個是content 也就是發(fā)送的微博內(nèi)容,另一個是st,這里的st通過幾次的檢驗,猜測應(yīng)該是網(wǎng)站的反爬蟲措施。這里獲得st的方法是通過同為Network標(biāo)簽下的config請求,里面存放了st值,我們將 JSON 格式的字符串轉(zhuǎn)換為字典,然后取到 st 的值

方法

config_req = session.get("https://m.weibo.cn/api/config")
config = config_req.json()
st = config["data"]["st"]
print(st)   #每隔一段時間st值會改變

登錄和發(fā)送微博的完整代碼如

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來保留登錄狀態(tài)
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("請輸入發(fā)送的內(nèi)容:"),,
	  "st": st
}
compose_req = session.post("https://m.weibo.cn/api/statuses/update", data=compose_data)
print(compose_req.json())	# 輸出:{"ok": 1, "data": 省略部分內(nèi)容...}

調(diào)整結(jié)構(gòu)后的代碼(功能一樣)如

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"]["st"]
    	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("請輸入發(fā)送的內(nèi)容:"))

 

三、實(shí)現(xiàn)微博自動點(diǎn)贊

完整的代碼

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"]["st"]
    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"]["cards"]
    return weibo_list
 # 點(diǎn)贊微博
  def vote_up(self, id):
    vote_up_data = {
      "id": id,  # 要點(diǎn)贊的微博 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"])
  # 批量點(diǎn)贊微博
  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程序,我還會繼續(xù)向大家分享的,希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/huisoul/article/details/116008126

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: www在线免费观看 | 亚洲国产成人久久综合区 | 国产91第一页| 草莓香蕉绿巨人丝瓜榴莲污在线观看 | 擦逼视频| 国产 日韩 一区 | 2020年精品国产午夜福利在线 | 国产欧美日韩综合 | 九九精品视频在线观看九九 | 亚洲国产精品热久久 | 日本在线看| 国产馆| 九九精品视频在线免费观看 | 日韩三及片 | avidolz中文版| 国产精品成人一区二区1 | 无遮无挡免费视频 | 天天做天天爽天天谢 | 帅小伙和警官同性3p | boobsmilking流奶水 | 冰漪丰满大乳人体图片欣赏 | 草莓香蕉绿巨人丝瓜榴莲污在线观看 | 美女流白浆 | 91小视频在线观看免费版高清 | 亚洲色图欧美视频 | 国产精品污双胞胎在线观看 | 妹妹你插的我好爽 | 91在线 在线播放 | 国产高清好大好夹受不了了 | 99久久无色码中文字幕 | 成人欧美一区在线视频在线观看 | 国色天香社区视频免费高清在线观看 | avtt手机版| 精品国产在天天线在线麻豆 | 国产悠悠视频在线播放 | 亚洲黄色高清 | 国产一区二区三区欧美 | 香港三级血恋3 | 国产中文在线视频 | 98国产视频 | 国产日韩精品一区二区三区 |