<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 7859字,需瀏覽 16分鐘

           ·

          2021-10-23 02:52

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

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

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

          目錄


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

          首先進(jìn)入后按F12打開(kāi)開(kāi)發(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ò)一些爬蟲(chóng)的同學(xué)便會(huì)直接上手寫(xiě)出如上雷同的代碼,但發(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)開(kāi)Request Headers(請(qǐng)求頭)檢查可能還有什么字段會(huì)用來(lái)判斷用戶正常訪問(wèn)

          一般 referer(請(qǐng)求來(lái)源頁(yè)面)、origin(誰(shuí)發(fā)起的請(qǐng)求)、host(主機(jī)名及端口號(hào)) 字段也常被用于反爬蟲(chóng),當(dāng)我們的爬蟲(chó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)入開(kāi)發(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)站的反爬蟲(chó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ù)向大家分享的。


          瀏覽 92
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  少妇丰满少妇大乳毛片 | 中文字幕第一页国产 | 婷婷色一二三区波多野结衣 | AAA级大片 | 成人性生交大片免费卡看 |