Python 微信公衆號文章爬取

一.思路

咱們經過網頁版的微信公衆平臺的圖文消息中的超連接獲取到咱們須要的接口圖文消息
超連接
從接口中咱們能夠獲得對應的微信公衆號和對應的全部微信公衆號文章。python

二.接口分析

獲取微信公衆號的接口:
https://mp.weixin.qq.com/cgi-bin/searchbiz?
參數:
action=search_biz
begin=0
count=5
query=公衆號名稱
token=每一個帳號對應的token值
lang=zh_CN
f=json
ajax=1
請求方式:
GET
因此這個接口中咱們只須要獲得token便可,而query則是你須要搜索的公衆號,token則能夠經過登陸後的網頁連接獲取獲得。
微信公衆號web

獲取對應公衆號的文章的接口:
https://mp.weixin.qq.com/cgi-bin/appmsg?
參數:
action=list_ex
begin=0
count=5
fakeid=MjM5NDAwMTA2MA==
type=9
query=
token=557131216
lang=zh_CN
f=json
ajax=1
請求方式:
GET
在這個接口中咱們須要獲取的值有上一步的token以及fakeid,而這個fakeid則在第一個接口中能夠獲取獲得。從而咱們就能夠拿到微信公衆號文章的數據了。
微信公衆號ajax

三.實現

第一步:

首先咱們須要經過selenium模擬登陸,而後獲取到cookie和對應的tokenjson

def weChat_login(user, password): post = {} browser = webdriver.Chrome() browser.get('https://mp.weixin.qq.com/') sleep(3) browser.delete_all_cookies() sleep(2) # 點擊切換到帳號密碼輸入 browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click() sleep(2) # 模擬用戶點擊 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) # 點擊登陸 browser.find_element_by_xpath("//a[@class='btn_login']").click() sleep(2) # 微信登陸驗證 print('請掃描二維碼') sleep(20) # 刷新當前網頁 browser.get('https://mp.weixin.qq.com/') sleep(5) # 獲取當前網頁連接 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保存到本地成功') # 對當前網頁連接進行切片,獲取到token paramList = url.strip().split('?')[1].split('&') # 定義一個字典存儲數據 paramdict = {} for item in paramList: paramdict[item.split('=')[0]] = item.split('=')[1] # 返回token return paramdict['token'] 

定義了一個登陸方法,裏面的參數爲登陸的帳號和密碼,而後定義了一個字典用來存儲cookie的值。經過模擬用戶輸入對應的帳號密碼而且點擊登陸,而後會出現一個掃碼驗證,用登陸的微信去掃碼便可。
刷新當前網頁後,獲取當前cookie以及token而後返回。微信

第二步:

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': '搜索的公衆號名稱', 'token': token, 'lang': 'zh_CN', 'f': 'json', 'ajax': '1' } search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params) 

將咱們獲取到的token和cookie傳進來,而後經過requests.get請求,得到返回的微信公衆號的json數據cookie

lists = search_resp.json().get('list')[0] 

 

經過上面的代碼便可獲取到對應的公衆號數據app

fakeid = lists.get('fakeid') 

 

經過上面的代碼就能夠獲得對應的fakeid微信公衆平臺

2.請求獲取微信公衆號文章接口,取到咱們須要的文章數據

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數據。
咱們就實現了對微信公衆號文章的爬取。post

四.總結

經過對微信公衆號文章的爬取,須要掌握selenium和requests的用法,以及如何獲取到請求接口。可是須要注意的是當咱們循環獲取文章時,必定要設置延遲時間,否則帳號很容易被封禁,從而得不到返回的數據。ui

交流基地:630390733

相關文章
相關標籤/搜索