querylist采集微信公眾號文章(微信公眾號文章的GET及方法(二)-)
優(yōu)采云 發(fā)布時(shí)間: 2022-03-03 03:13querylist采集微信公眾號文章(微信公眾號文章的GET及方法(二)-)
一.想法
我們通過(guò)微信公眾平臺網(wǎng)頁(yè)版圖文消息中的超鏈接獲取我們需要的界面
從界面中我們可以得到對應的微信公眾號和所有對應的微信公眾號文章。
二.界面分析
獲取微信公眾號界面:
范圍:
行動(dòng)=search_biz
開(kāi)始=0
計數=5
query=公眾號
token = 每個(gè)賬戶(hù)對應的token值
lang=zh_CN
f=json
阿賈克斯=1
請求方法:
得到
所以在這個(gè)界面中,我們只需要獲取token,查詢(xún)的是你需要搜索的公眾號,登錄后通過(guò)web鏈接即可獲取token。
獲取公眾號對應的文章接口:
范圍:
行動(dòng)=list_ex
開(kāi)始=0
計數=5
fakeid=MjM5NDAwMTA2MA==
類(lèi)型=9
查詢(xún)=
令牌=557131216
lang=zh_CN
f=json
阿賈克斯=1
請求方法:
得到
在這個(gè)接口中,我們需要獲取的值是上一步的token和fakeid,而這個(gè)fakeid可以在第一個(gè)接口中獲取。這樣我們就可以得到微信公眾號文章的數據了。
三.實(shí)現
第一步:
首先我們需要通過(guò)selenium來(lái)模擬登錄,然后獲取cookie和對應的token
def weChat_login(user, password): post = {} browser = webdriver.Chrome() browser.get('https://mp.weixin.qq.com/') sleep(3) browser.delete_all_cookies() sleep(2) # 點(diǎn)擊切換到賬號密碼輸入 browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click() sleep(2) # 模擬用戶(hù)點(diǎn)擊 input_user = browser.find_element_by_xpath("//input[@name='account']") input_user.send_keys(user) input_password = browser.find_element_by_xpath("//input[@name='password']") input_password.send_keys(password) sleep(2) # 點(diǎn)擊登錄 browser.find_element_by_xpath("//a[@class='btn_login']").click() sleep(2) # 微信登錄驗證 print('請掃描二維碼') sleep(20) # 刷新當前網(wǎng)頁(yè) browser.get('https://mp.weixin.qq.com/') sleep(5) # 獲取當前網(wǎng)頁(yè)鏈接 url = browser.current_url # 獲取當前cookie cookies = browser.get_cookies() for item in cookies: post[item['name']] = item['value'] # 轉換為字符串 cookie_str = json.dumps(post) # 存儲到本地 with open('cookie.txt', 'w+', encoding='utf-8') as f: f.write(cookie_str) print('cookie保存到本地成功') # 對當前網(wǎng)頁(yè)鏈接進(jìn)行切片,獲取到token paramList = url.strip().split('?')[1].split('&') # 定義一個(gè)字典存儲數據 paramdict = {} for item in paramList: paramdict[item.split('=')[0]] = item.split('=')[1] # 返回token return paramdict['token']
定義了一個(gè)登錄方法,其中的參數是登錄賬號和密碼,然后定義了一個(gè)字典來(lái)存儲cookie的值。模擬用戶(hù)輸入對應的賬號密碼,點(diǎn)擊登錄,會(huì )出現掃碼驗證,登錄微信即可掃碼。
刷新當前網(wǎng)頁(yè)后,獲取當前cookie和token并返回。
第2步:
1.請求獲取對應的公眾號接口,獲取我們需要的fakeid
url = 'https://mp.weixin.qq.com' headers = { 'HOST': 'mp.weixin.qq.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63' } with open('cookie.txt', 'r', encoding='utf-8') as f: cookie = f.read() cookies = json.loads(cookie) resp = requests.get(url=url, headers=headers, cookies=cookies) search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?' params = { 'action': 'search_biz', 'begin': '0', 'count': '5', 'query': '搜索的公眾號名稱(chēng)', 'token': token, 'lang': 'zh_CN', 'f': 'json', 'ajax': '1' } search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)
傳入我們獲取的token和cookie,然后通過(guò)requests.get請求獲取微信公眾號返回的json數據
lists = search_resp.json().get('list')[0]
通過(guò)以上代碼可以獲取對應的公眾號數據
fakeid = lists.get('fakeid')
通過(guò)上面的代碼,可以得到對應的 fakeid
2.請求訪(fǎng)問(wèn)微信公眾號文章接口,獲取我們需要的文章數據
appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?' params_data = { 'action': 'list_ex', 'begin': '0', 'count': '5', 'fakeid': fakeid, 'type': '9', 'query': '', 'token': token, 'lang': 'zh_CN', 'f': 'json', 'ajax': '1' } appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)
我們傳入 fakeid 和 token 然后調用 requests.get 請求接口獲取返回的 json 數據。
我們實(shí)現了微信公眾號文章的爬取。
四.總結
通過(guò)爬取微信公眾號文章,需要掌握selenium和requests的用法,以及如何獲取request接口。但是需要注意的是,我們在循環(huán)獲取文章的時(shí)候,一定要設置一個(gè)延遲時(shí)間,否則容易被封號,獲取不到返回的數據。
至此,這篇關(guān)于Python微信公眾號文章爬取示例代碼的文章文章就介紹到這里了。更多Python微信公眾號文章的爬取內容請搜索本站上一篇文章或繼續瀏覽以下相關(guān)文章希望大家多多支持本站未來(lái)!