python3 微博群關(guān)注 自動發(fā)群消息

一.開發(fā)環(huán)境

python3.6

windows7

chrome谷歌瀏覽器

需要的python的包 requests

親測可運行也切,時間(2019-1-30)

二.找到需要的數(shù)據(jù)

2.1 在電腦上找到微博群

打開chrome瀏覽器

先清緩存碎罚,ctrl+shift +del 博秫,清空cookie等緩存數(shù)據(jù)

按F12葫男,點擊調(diào)試界面左上角的按鈕進入手機模式?

f5刷新進入https://m.weibo.cn,這么做主要是為了能夠在手機上看到自己的微博群。

??

群自己用手機app搜然后添加吧(這是唯一比較麻煩的地方了,trust me!)

2.2 group_id

?

(隨筆=》隨便)手誤剥汤,見諒。

group_id記錄下來排惨,代碼會用到吭敢。

2.3 關(guān)注,需要的數(shù)據(jù)

首先暮芭,當(dāng)然是群里所有成員的列表了鹿驼,關(guān)注某個人至少需要他的用戶id吧。

??

?


點開更多成員后成員列表往下拉一段辕宏,在右邊的network找到groupmemberslist?group_id=xxx這條消息畜晰。注意在點“更多成員”之前,可以清一下network里的東西瑞筐,比較好找凄鼻。(覺得頭疼不好找?其實我也經(jīng)歷過,多折騰一會就好了)

urluser ="https://m.weibo.cn/groupChat/userChat/groupMembersList?group_id=%s&page=%d"% (groupid, nums)

這里面的page參數(shù)就是第幾頁群成員面哼,不會一次給你下發(fā)所有的成員野宜。(實際需要下拉扫步,才一點一點的展示出來)

返回的數(shù)據(jù)上圖的Response就包含了群成員的信息魔策,很長。

可以復(fù)制下來河胎,百度json找個網(wǎng)站格式化http://www.bejson.com/

?

id就是群用戶的id闯袒,screen_name的值顯示一堆“亂碼”,事實就是群用戶的昵稱(可以百度“編碼”找網(wǎng)站 unicode轉(zhuǎn)中文看看http://tool.chinaz.com/tools/unicode.aspx游岳,可以忽略不影響步驟政敢。)

正則找出respone返回的值里用card_group和后面 用[ ]包裹的json數(shù)據(jù)——用戶的信息, 正則不熟的話胚迫,只能自己研究研究了喷户,這里不多說。

pattern = re.compile('\['+'(.*?)'+']',re.S)json1 = pattern.findall(respone.text)[0]+']}'

?

"card_group"后面的就是可以轉(zhuǎn)化為jsaon數(shù)組的數(shù)據(jù)了访锻。

json_base = json.loads(json1)

card_group = json_base['card_group']

====================中場休息=========================

2.4這篇文章里不打算寫登錄獲取cookie(比較麻煩褪尝,容易有挫敗感。期犬。)

登錄后河哑,隨便找人點個關(guān)注

?

2.5 兩個st參數(shù)

關(guān)注和發(fā)送群信息,各需要一個會變化的st參數(shù)

2.51關(guān)注的需要的st參數(shù)(唯二麻煩的)

st_url ='https://m.weibo.cn/api/config/'st_respone = requests.post(st_url, headers=headetr2, verify=False)? ? ? ?

st_json = json.loads(st_respone.content)? ? ? ?

print('st = '+ st_json['data']['st'])

st_url 如果你想問為什么是這個url龟虎,我告訴你猜的你會想揍我嗎璃谨。。

其實在電腦上自己手動點關(guān)注的時候,在create里的headers的formdata里看到st的值佳吞,然后搜索拱雏。在一個respone里看到了

?

然后看到一個 叫config的,就比較順眼底扳,看看他的headers 里的urlhttps://m.weibo.cn/api/config古涧,嘗試復(fù)制到瀏覽器地址欄里,馬上就返回我想要的值

{"preferQuickapp":0,"data":{"login":true,"st":"1de4bb","uid":"5156567902"},"ok":1}花盐。

嗯羡滑,冥冥之中自有定數(shù),是它了算芯。

(找不到的話最好在打開群的界面刷新一次柒昏,可能在前面的操作里被你清掉了)

2.51發(fā)群信息需要的st參數(shù)(唯三麻煩的,事不過三)

首先熙揍,自己找個群职祷,發(fā)個消息

?

sendMsg,需要額外獲取的就是st參數(shù)。

chatgroup_url ='https://m.weibo.cn/groupChat/userChat/chat?group_id='+ str(groupid)chatgroup_respone = requests.get(chatgroup_url, headers=headetr2, verify=False)try:? chat_st = re.search(r'\"st\":\"(\w+)\"', chatgroup_respone.text)? chat_st_param = chat_st.group().split('"')[3]#在群里發(fā)消息需要的參數(shù)st届囚,注意和關(guān)注的st參數(shù)不一樣

還是搜eec616有梆,不行就再打開群的界面,刷新瀏覽器意系,再搜泥耀。最終發(fā)現(xiàn)只有一條符合的

?

在respone發(fā)現(xiàn) "st":"eec616" 有2個,用正則匹配其中一個就行蛔添。

3.最后上代碼

headers里的cookie用自己的

guanzhugroup(xxxx)這里的groupid痰催,需要是自己加入的群

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import requests

import sys

import json

import time

import re

import urllib3#不顯示ssh驗證的提示,不管也行

urllib3.disable_warnings()#不顯示ssh驗證的提示迎瞧,不管也行urllib3.disable_warnings()

headers = {

'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

? ? ? ? 'Accept-Encoding':'gzip, deflate, br',

? ? ? ? 'Accept-Language':'zh-CN,zh;q=0.9',

? ? ? ? 'Cache-Control':'max-age=0',

? ? ? ? 'Connection':'keep-alive',

? ? ? ? 'Cookie':'_T_WM=* ***********',#步驟2.4登錄微博后找到requestheader里的cookie

? ? ? ? 'Host':'m.weibo.cn',

? ? ? ? 'RA-Sid':'B781E81A-20150402-024118-ce25e1-ba5345',

? ? ? ? 'RA-Ver':'3.0.8',

? ? ? ? # 'Upgrade-Insecure-Requests': '1',

? ? ? ? 'User-Agent':'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Mobile Safari/537.36',

? ? ? ? 'Referer':'https://m.weibo.cn/message',

? ? }

def guanzhugroup(groupid):

for numsin range(14, 49):# 這里是模擬頁數(shù)夸溶,在獲取groupMembersList的返回信息里有max_pageprint('***************第幾頁='+str(nums))

? ? ? ? print('***************第幾頁='+str(nums))

# urluser = "https://m.weibo.cn/groupChat/userChat/groupMembersList?group_id=4197189808619503&page="+str(nums)

? ? ? ? urluser ="https://m.weibo.cn/groupChat/userChat/groupMembersList?group_id=%s&page=%d" % (groupid, nums)

respone = requests.get(urluser, headers=headers, verify=False)

# print(respone)

? ? ? ? print(respone.text)

pattern = re.compile('\['+'(.*?)'+']',re.S)

json1 = pattern.findall(respone.text)[0]+']}'

? ? ? ? json_base = json.loads(json1)

print(json_base)

card_group = json_base['card_group']

st_url ='https://m.weibo.cn/api/config/'

? ? ? ? st_respone = requests.post(st_url, headers=headers, verify=False)

st_json = json.loads(st_respone.content)

print('st = ' + st_json['data']['st'])

# print(len(card_group))

? ? ? ? for numin range(0, len(card_group)):

member = card_group[num]

print(member['member']['id'])

print(print(member['member']['screen_name']))

postData2 = {"uid": member['member']['id'], 'st': st_json['data']['st']}# post請求傳的數(shù)據(jù)

? ? ? ? ? ? url ='https://m.weibo.cn/api/friendships/create'

? ? ? ? ? ? respone1 = requests.post(url, data=postData2, headers=headers,verify=False)

print(respone1.text)

json_str = respone1.content

chatgroup_url ='https://m.weibo.cn/groupChat/userChat/chat?group_id=' +str(groupid)

chatgroup_respone = requests.get(chatgroup_url, headers=headers, verify=False)

print(chatgroup_respone.text)

try:

chat_st = re.search(r'\"st\":\"(\w+)\"', chatgroup_respone.text)

chat_st_param = chat_st.group().split('"')[3]#在群里發(fā)消息需要的參數(shù)st,注意和關(guān)注的st參數(shù)不一樣

? ? ? ? ? ? ? ? sendmsg_url ='https://m.weibo.cn/groupChat/userChat/sendMsg'

? ? ? ? ? ? ? ? sendmsg_data = {

'content':'@%s 我關(guān)注你了' % member['member']['screen_name'],#這里的@沒有實際的@功能凶硅,電腦上不太好@缝裁,不知道實際的@發(fā)的是什么。還在研究用手機設(shè)置代理或者安卓模擬器抓個包試試

? ? ? ? ? ? ? ? ? ? 'st': chat_st_param,

? ? ? ? ? ? ? ? ? ? 'group_id': groupid,

? ? ? ? ? ? ? ? }

sendmsg_respone = requests.post(sendmsg_url, headers=headers, data=sendmsg_data, verify=False)

print('send msg ret = '+sendmsg_respone.text)

except Exception as e:

print(e)

time.sleep(10)

time.sleep(30)

guanzhugroup(4075182799395477)

簡書好像沒對代碼做處理足绅,復(fù)制過來不太對了捷绑。可以去下載

篇幅比較長,其實東西不多编检,如果沒研究過類似的東西會比較難上手胎食,可以先收藏,再研究允懂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厕怜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粥航,老刑警劉巖琅捏,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異递雀,居然都是意外死亡柄延,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門缀程,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搜吧,“玉大人,你說我怎么就攤上這事杨凑÷四危” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵撩满,是天一觀的道長蜒程。 經(jīng)常有香客問我,道長伺帘,這世上最難降的妖魔是什么昭躺? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮伪嫁,結(jié)果婚禮上领炫,老公的妹妹穿的比我還像新娘。我一直安慰自己礼殊,他們只是感情好驹吮,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布针史。 她就那樣靜靜地躺著晶伦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啄枕。 梳的紋絲不亂的頭發(fā)上婚陪,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音频祝,去河邊找鬼泌参。 笑死,一個胖子當(dāng)著我的面吹牛常空,可吹牛的內(nèi)容都是我干的沽一。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼漓糙,長吁一口氣:“原來是場噩夢啊……” “哼铣缠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蝗蛙,失蹤者是張志新(化名)和其女友劉穎蝇庭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捡硅,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡哮内,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了壮韭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片北发。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖喷屋,靈堂內(nèi)的尸體忽然破棺而出鲫竞,到底是詐尸還是另有隱情,我是刑警寧澤逼蒙,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布从绘,位于F島的核電站,受9級特大地震影響是牢,放射性物質(zhì)發(fā)生泄漏僵井。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一驳棱、第九天 我趴在偏房一處隱蔽的房頂上張望批什。 院中可真熱鬧,春花似錦社搅、人聲如沸驻债。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽合呐。三九已至,卻和暖如春笙以,著一層夾襖步出監(jiān)牢的瞬間淌实,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工猖腕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拆祈,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓倘感,卻偏偏與公主長得像放坏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子老玛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容