今天爲你們介紹如何將本身喜歡的公衆號的歷史文章轉成 PDF 保存到本地。前幾天還有朋友再問,能不能幫把某某公衆號的文章下載下來,由於他很喜歡這個號的文章,但因爲微信上查看歷史文章不能排序,一些較早期的文章翻很長時間才能找到,並且每每沒有一次看不了幾篇,下次還得再重頭翻,想一想就很痛苦。html
目前我在網上找了找,看到實現的方式大概分爲如下三種:python
wechatsogou
這個 Python 模塊,去搜索公號後,實現批量下載。總體來看最後一種方式是最簡單的,接下來將以第三種方式爲例,爲你們介紹如何達到批量下載的目的。ajax
首先咱們登錄到公衆號平臺,登錄成功後會跳轉到公衆號管理首頁,以下圖:json
而後咱們在當前頁面打開瀏覽器開發者工具,刷新下頁面,在網絡裏就能看到各類請求,在這裏咱們點開一個請求 url,而後就能看到下圖網絡請求信息,裏面包含請求的 Cookie 信息。瀏覽器
接下來咱們須要把 Cookie 信息複製下來轉換成 Json 格式串保存到文本文件裏,以供後面請求連接時使用。這裏須要寫一段 Python 代碼進行處理,新建文件 gen_cookies.py
寫入代碼以下:微信
# gen_cookies.py
import json
# 從瀏覽器中複製出來的 Cookie 字符串cookie_str = "pgv_pvid=9551991123; pac_uid=89sdjfklas; XWINDEXGREY=0; pgv_pvi=89273492834; tvfe_boss_uuid=lkjslkdf090; RK=lksdf900; ptcz=kjalsjdflkjklsjfdkljslkfdjljsdfk; ua_id=ioje9899fsndfklsdf-DKiowiekfjhsd0Dw=; h_uid=lkdlsodifsdf; mm_lang=zh_CN; ts_uid=0938450938405; mobileUV=98394jsdfjsd8sdf; \……中間部分省略 \ EXIV96Zg=sNOaZlBxE37T1tqbsOL/qzHBtiHUNZSxr6TMqpb8Z9k="
cookie = {}# 遍歷 cookie 信息for cookies in cookie_str.split("; "): cookie_item = cookies.split("=") cookie[cookie_item[0]] = cookie_item[1]# 將cookies寫入到本地文件with open('cookie.txt', "w") as file: # 寫入文件 file.write(json.dumps(cookie))
好了,將 Cookie 寫入文件後,接下來就來講下在哪裏能夠找到某公號的文章連接。cookie
在公號管理平臺首頁點擊左側素材管理菜單,進入素材管理頁面,而後點擊右側的新建圖文素材按鈕,以下圖:網絡
進入新建圖文素材頁面,而後點擊這裏的超連接:app
在編輯超連接的彈出框裏,點擊選擇其餘公衆號的鏈接:dom
在這裏咱們就能經過搜索,輸入關鍵字搜索咱們想要找到公衆號,好比在這裏咱們搜索 "Python 技術",就能看到以下搜索結果:
而後點擊第一個 Python 技術的公衆號,在這裏咱們就能看到這個公衆號歷史發佈過的全部文章:
咱們看到這裏文章每頁只顯示五篇,一共分了31頁,如今咱們再打開自帶的開發者工具,而後在列表下面點下一頁的按鈕,在網絡中會看到向服務發送了一個請求,咱們分析下這個請求的參數。
經過請求參數,咱們大概能夠分析出參數的意義, begin
是從第幾篇文章開始,count
是一次查出幾篇,fakeId
對應這個公號的惟一 Id,token
是經過 Cookie 信息來獲取的。好了,知道這些咱們就能夠用 Python 寫段代碼去遍歷請求,新建文件 gzh_download.py
,代碼以下:
# gzh_download.py# 引入模塊import requestsimport jsonimport reimport randomimport timeimport pdfkit
# 打開 cookie.txtwith open("cookie.txt", "r") as file: cookie = file.read()cookies = json.loads(cookie)url = "https://mp.weixin.qq.com"#請求公號平臺response = requests.get(url, cookies=cookies)# 從url中獲取tokentoken = re.findall(r'token=(\d+)', str(response.url))[0]# 設置請求訪問頭信息headers = { "Referer": "https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&token=" + token + "&lang=zh_CN", "Host": "mp.weixin.qq.com", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",}
# 循環遍歷前10頁的文章for j in range(1, 10, 1): begin = (j-1)*5 # 請求當前頁獲取文章列表 requestUrl = "https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin="+str(begin)+"&count=5&fakeid=MzU1NDk2MzQyNg==&type=9&query=&token=" + token + "&lang=zh_CN&f=json&ajax=1" search_response = requests.get(requestUrl, cookies=cookies, headers=headers) # 獲取到返回列表 Json 信息 re_text = search_response.json() list = re_text.get("app_msg_list") # 遍歷當前頁的文章列表 for i in list: # 將文章連接轉換 pdf 下載到當前目錄 pdfkit.from_url(i["link"], i["title"] + ".pdf") # 過快請求可能會被微信問候,這裏進行10秒等待 time.sleep(10)
好了,就上面這點代碼就夠了,這裏在將 URL 轉成 PDF 時使用的是 pdfkit
的模塊,使用這個須要先安裝 wkhtmltopdf
這個工具,官網地址在文末給出,支持多操做系統,本身下載安裝便可,這裏就再也不贅述。
安裝完後,還須要再執行 pip3 install pdfkit
命令安裝這個模塊。安裝好了,如今來執行下 python gzh_download.py
命令啓動程序看下效果怎麼樣。
看來是成功了,這個工具仍是很強大的。
本文爲你們介紹瞭如何經過分析公衆號平臺的功能,找到能夠訪問到某個公衆號全部文章的連接,從而能夠批量下載某公衆號全部文章,並轉爲 PDF 格式保存到本地的目的。這裏經過 Python 寫了少許代碼就實現文章的抓取和轉換的工做,若是有興趣你也能夠試試。
https://wkhtmltopdf.org/downloads.html