python自動(dòng)獲取微信公眾號(hào)最新文章的實(shí)現(xiàn)代碼
微信公眾號(hào)獲取思路
常用的微信公眾號(hào)文章獲取方法有搜狐、微信公眾號(hào)主頁(yè)獲取和api接口等多個(gè)方法。
聽說(shuō)搜狐最近不怎么好用了,之前用的api接口也頻繁維護(hù),所以用了微信公眾平臺(tái)來(lái)進(jìn)行數(shù)據(jù)爬取。
首先登陸自己的微信公眾平臺(tái),沒有賬號(hào)的可以注冊(cè)一個(gè)。進(jìn)來(lái)之后找“圖文信息”,就是寫公眾號(hào)的地方

點(diǎn)進(jìn)去后就是寫公眾號(hào)文章的界面,在界面中找到“超鏈接” 的字段,在這里就可以對(duì)其他的公眾號(hào)進(jìn)行檢索。


以“python”為例,輸入要檢索的公眾號(hào)名稱,在顯示的公眾號(hào)中選擇要采集的公眾號(hào)

點(diǎn)開瀏覽器的檢查,找到network中,下圖里的這個(gè)鏈接,而右邊的Request URL才是存儲(chǔ)公眾號(hào)數(shù)據(jù)的真實(shí)鏈接。說(shuō)明這是個(gè)json網(wǎng)頁(yè)。

采集實(shí)例
以公眾號(hào)“python”的 鏈接 為例對(duì)網(wǎng)址進(jìn)行分析。
https://mp.weixin.qq.com/cgi-bin/appmsg:微信公眾平臺(tái)的鏈接 "token": "163455614", #需要定期修改的token "lang": "zh_CN", #語(yǔ)言 "f": "json", "ajax": "1", #顯示幾天的文章 "action": "list_ex" "begin": "0", #起始頁(yè)面 "count": "1", #計(jì)數(shù) "query": "", "fakeid": 'MzIwNDA1OTM4NQ==', #公眾號(hào)唯一編碼 "type": "9",
既然發(fā)現(xiàn)了fakeid是代表公眾號(hào)的唯一編碼,那接下來(lái)只需要把需要的公眾號(hào)的fakeid找到就行,我隨意找了三個(gè)公眾號(hào)的進(jìn)行測(cè)試。
fakeid=[ 'MzIwNDA1OTM4NQ==','MzkxNzAwMDkwNQ==','MjM5NzI0NTY3Mg=='] #若增加公眾號(hào)需要增加fakeid
那接下來(lái)就是對(duì)網(wǎng)址的請(qǐng)求
首先導(dǎo)入需要的庫(kù)
import time import requests from lxml import etree import pandas as pd import json import numpy as np import datetime import urllib3 from urllib3.exceptions import InsecureRequestWarning urllib3.disable_warnings(InsecureRequestWarning)
由于不想重復(fù)登錄公眾號(hào)平臺(tái),可以使用cookie避開登陸,對(duì)文章求情前需要找到網(wǎng)頁(yè)的cookie和User-Agent,由于微信公眾號(hào)回定期刷新,這個(gè)cookie和上面的token都要定期更換。
為避免反扒最好也找個(gè)代理ip
headers = {
"Cookie": "appmsglist_action_3567997841=card;wxuin=49763073568536;pgv_pvid=6311844914;ua_id=x6Ri8bc9LeaWnjNNAAAAADI-VXURALRxlSurJyxNNvg=;mm_lang=zh_CN;pac_uid=0_3cf43daf28071;eas_sid=11Q6v5b0x484W9i7W0Z7l7m3I8;rewardsn=;wxtokenkey=777;wwapp.vid=;wwapp.cst=;wwapp.deviceid=;uuid=fd43d0b369e634ab667a99eade075932;rand_info=CAESIHgWwDfp3W4M9F3/TGnzHp4kKkrkMiCEvN/tSNhHtNBm;slave_bizuin=3567997841;data_bizuin=3567997841;bizuin=3567997841;data_ticket=IfMEEajZ8UvywUZ1NiIv9eKZkq0cgeS0oP6tTzEwNSjwK6q+u5vLw0XYeFvLL/JA;slave_sid=aVBzSlpYOGt4eTdmbzFRWDc1OUhzR1A1UkwzdUdBaklDaGh2dWY2MUZKTEw1Um1aalZRUXg5aVBMeEJVNklCcGlVN0s5Z3VEMmRtVENHS1ZxNTBDOWRCR0p2V2FyY2daU0hxT09Remd5YmlhRWExZkMwblpweVc3SndUbnJIQk55MGhUeExJa1NJcWZ0QmJS;slave_user=gh_e0f449d4f2b6;xid=7d5dc56bb7bb526c70cfef3f6bdfa18a",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36",
}
proxies = {'http': '112.80.248.73'}
接下來(lái)就可以對(duì)頁(yè)面進(jìn)行爬取,獲取頁(yè)面中的文章標(biāo)題與文章鏈接,以及文章的時(shí)間,對(duì)網(wǎng)頁(yè)的信息進(jìn)行分析發(fā)現(xiàn)網(wǎng)頁(yè)的所有信息都保存在’app_msg_list’這個(gè)字段中,所以對(duì)這個(gè)字段中的數(shù)據(jù)進(jìn)行提取。
代碼如下:
獲取到的數(shù)據(jù)包存在df中,這里的數(shù)據(jù)還不是微信公眾號(hào)的最新文章數(shù)據(jù),而是微信公眾號(hào)這最近一天發(fā)出的文章數(shù)據(jù)。所以還需要對(duì)發(fā)文的時(shí)間進(jìn)行篩選。注意到這里的時(shí)間格式為時(shí)間戳,所以需要對(duì)時(shí)間數(shù)據(jù)進(jìn)行轉(zhuǎn)換
轉(zhuǎn)換代碼如下:
def time_s(df):
def transfer_time(s): #時(shí)間處理
aa = time.ctime(s)
bb = aa.split(' ')
cc = (bb[-1]+"-"+bb[1]+"-"+bb[-3]).replace('Jan','1').replace('Feb','2').replace('Mar','3'). \
replace('Apr','4').replace('May','5').replace('Jun','6').replace('Jul','7').replace('Aug','8') \
.replace('Sep','9').replace('Oct','10').replace('Nov','11').replace('Dec','12')
dd = datetime.datetime.strptime(cc,'%Y-%m-%d').date()
return dd
ti=[]
hd=[]
for i in range(0,len(df['time'])):
timestap= transfer_time(df['time'][i])
ti.append(timestap)
#print(ti)
d= ti[i] + datetime.timedelta(weeks=0, days=0, hours=0, minutes=0, seconds=0, milliseconds=0, microseconds=0, )
#dc = d.strftime("%Y-%m-%d")
hd.append(d)
df['time']=hd這樣就可以把微信公眾號(hào)的時(shí)間戳數(shù)據(jù)轉(zhuǎn)換為時(shí)間數(shù)據(jù),之后,根據(jù)當(dāng)前天的日期對(duì)數(shù)據(jù)集中的內(nèi)容進(jìn)行提取與存儲(chǔ)就OK啦
dat=df[df['time'] == datetime.date.today() + datetime.timedelta(days= -1)] #自動(dòng)獲取昨天日期,將-1改為-2,則為前天的日期,以此類推
##改自動(dòng)化
path = 'C:/Users/gpower/Desktop/work/行業(yè)信息/' #根據(jù)自己電腦位置更改
import re
filename=path+"微信公眾號(hào)采集" + re.sub(r'[^0-9]','',datetime.datetime.now().strftime("%Y-%m-%d")) + '.csv'
# 對(duì)文件進(jìn)行命名,以“微信公眾號(hào)采集+當(dāng)前日期”命名
dat.to_csv(filename,encoding='utf_8_sig')
print("保存成功")這樣就可以把需要的微信公眾號(hào)最新文章采集下來(lái)了,需要多個(gè)微信公眾號(hào)在fakeid中添加公眾號(hào)的識(shí)別碼就OK啦~
到此這篇關(guān)于python自動(dòng)獲取微信公眾號(hào)最新文章的文章就介紹到這了,更多相關(guān)python自動(dòng)獲取微信公眾號(hào)文章內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python標(biāo)準(zhǔn)庫(kù)之Math,Random模塊使用詳解
math數(shù)學(xué)模塊和random隨機(jī)模塊是Python常用的標(biāo)準(zhǔn)庫(kù)之一。本文將詳細(xì)為大家介紹一下這兩個(gè)模塊的使用方法,需要的小伙伴可以參考一下2022-05-05
el-table 多表格彈窗嵌套數(shù)據(jù)顯示異常錯(cuò)亂問題解決方案
使用vue+element開發(fā)報(bào)表功能時(shí),需要列表上某列的超鏈接按鈕彈窗展示,在彈窗的el-table列表某列中再次使用超鏈接按鈕點(diǎn)開彈窗,以此類推多表格彈窗嵌套,本文以彈窗兩次為例,需要的朋友可以參考下2023-11-11
pycharm 實(shí)現(xiàn)顯示project 選項(xiàng)卡的方法
今天小編就為大家分享一篇pycharm 實(shí)現(xiàn)顯示project 選項(xiàng)卡的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
TensorFlow平臺(tái)下Python實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)
這篇文章主要為大家詳細(xì)介紹了TensorFlow平臺(tái)下Python實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
使用Tensorflow實(shí)現(xiàn)可視化中間層和卷積層
今天小編就為大家分享一篇使用Tensorflow實(shí)現(xiàn)可視化中間層和卷積層,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01

