人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

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

發(fā)布日期:2021-12-21 15:07 | 文章來(lái)源:源碼中國(guó)

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

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

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

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

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

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

網(wǎng)頁(yè)截圖

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

會(huì)報(bào)錯(cuò)的代碼

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)

這是因?yàn)橛行┚W(wǎng)站并不只是按照'user-agent'判斷用戶的正常訪問(wèn)的。那我們還需點(diǎn)開Request Headers(請(qǐng)求頭)檢查可能還有什么字段會(huì)用來(lái)判斷用戶正常訪問(wèn)

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

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

完整的代碼如下

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ā)微博吧

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

網(wǎng)頁(yè)截圖

當(dāng)微博界面點(diǎn)擊發(fā)送之后,Network標(biāo)簽就會(huì)出現(xiàn)update的請(qǐng)求,點(diǎn)進(jìn)去可以看到,請(qǐng)求地址是https://m.weibo.cn/api/statuses/update,請(qǐng)求方法是 POST。參數(shù)有兩個(gè)一個(gè)是content 也就是發(fā)送的微博內(nèi)容,另一個(gè)是st,這里的st通過(guò)幾次的檢驗(yàn),猜測(cè)應(yīng)該是網(wǎng)站的反爬蟲措施。這里獲得st的方法是通過(guò)同為Network標(biāo)簽下的config請(qǐng)求,里面存放了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)#每隔一段時(shí)間st值會(huì)改變

登錄和發(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來(lái)保留登錄狀態(tài)
session = requests.Session()
session.headers.update(headers)
login_req = session.post('https://passport.weibo.cn/sso/login', data=login_data)
# 獲取 st 請(qǐng)求
config_req = session.get('https://m.weibo.cn/api/config')
config = config_req.json()
st = config['data']['st']
compose_data = {
	  'content': input("請(qǐng)輸入發(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("請(qǐng)輸入發(fā)送的內(nèi)容:"))

三、實(shí)現(xiàn)微博自動(dòng)點(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程序,我還會(huì)繼續(xù)向大家分享的,希望大家以后多多支持本站!

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部