還在手動截圖或複制粘貼保存微信公衆号的好文章?告訴你一個更高效的方法,可以讓你自動化将你喜歡的微信公衆号文章保存為PDF,而且格式不變!這不僅可以幫你輕松整理、歸檔文章,還能在作者删除或公衆号被封時,依然保留那些珍貴的内容。今天,我将為大家帶來一項颠覆性的技術——自動化爬取微信公衆号文章并原樣保留格式存儲為PDF文件!從此告别繁瑣,一鍵搞定!而且是全網獨此真正有效代碼
一、為何需要下載微信公衆号文章為PDF?
微信公衆号作為我們獲取信息、學習知識的重要渠道,每天都有大量的優質文章湧現。然而,有時候我們會遇到一些不可預見的情況,比如文章被作者删除、微信公衆号被封号等,導緻我們無法再次找到這些好文章。或者,長按複制鍊接,打開網頁版保存,但總是少了點什麼——格式、圖片、排版全都變了樣。為了避免這些遺憾,将文章下載到本地并保存為PDF格式成為了一個很好的選擇。PDF格式具有跨平台、不易修改等特點,能夠确保文章内容的完整性和可讀性。
二、如何實現微信公衆号文章一鍵爬取并保存為PDF
前提準備
1.注冊一個個人微信公衆号用來獲取想要爬取的公衆号的長期地址
注冊方法:《》
2.準備環境并安裝相應的第三方庫
# 這是爬蟲必備庫#用于轉pdf的工具庫,有一個exe應用程序,# 可以後台私信獲取u#獲取每一篇文章的api接口#依賴庫默認是3.0.3版本,但是會報各種錯誤==0.11.15#安裝正确版本
3.下載軟件 我會放到網盤裡,後台私信''獲取下載鍊接
批量獲取微信公衆号往期推送的URL、主題和時間
進入微信公衆号——左側草稿箱——新的創作—— 在圖文編輯頁中選擇超鍊接——搜索你想要爬取的微信公衆号名稱——F12找到請求鍊接——複制curl bash——在網站中獲取請求地址和請求參數——解析獲取的結果,得到文章标題、文章時間和文章URL
import requests
import json
import time
def crawl_all_article_url(page):
cookies = {
'appmsglist_action_3948617697': 'card',
'ua_id': 'cPS3GpAA01IEkaRJAAAAAIvDxBMaEL0YwwkNCjBwcAQ=',
'wxuin': '00617100352084',
'mm_lang': 'zh_CN',
'pac_uid': '0_6f1a31a07c4ab',
'iip': '0',
'_qimei_uuid42': '17c1a0b23191007d54d4e4bc638bde211f0338f3bf',
'_qimei_q36': '',
'_qimei_h38': '8f95287254d4e4bc638bde2102000002517c1a',
'RK': 'jTHYN6T3Wp',
'ptcz': '7345f2bcdd021ede2b9e3b5ff3857a614e8f78a9ecdf01650aa9a3a225afd21e',
'pgv_pvid': '8536395802',
'ts_uid': '6019633394',
'__root_domain_v': '.weixin.qq.com',
'_qddaz': 'QD.243806759066417',
'qq_domain_video_guid_verify': '6e9c8245aad0e837',
'_qimei_fingerprint': '36d8e5c4ef2b920cd2da41f5f01ca167',
'_clck': '3902705164|1|fm1|0',
'uuid': '4f9478c2739d6acbb0878a2e7b6c7b35',
'rand_info': 'CAESINjnm2X0Xw6se5Kiw4ayZI9Ft4uFGZEaPM8tGhG8HhAl',
'slave_bizuin': '3902705164',
'data_bizuin': '3902705164',
'bizuin': '3902705164',
'data_ticket': 'DJqUc+FKg56UrvBm8mHaCSI28Je1eBjufcd/Bb1OMvhzcoXTTFoXRMrQIbNGjKtA',
'slave_sid': 'cG5yOWQzc0JrX3BNejZmMEhZWG5yN1JFZ1lzMzVWbW85aDZVRHpuSmw2UGVyaTczRFozdGFDMWpvd2ZQckhMbm5tX0pNc1FkcWNBX3VnbEFDZ29pZ3JLNW5hTEdqbm9ROXIyX01GMW5TeUYzQ2RhbUdoZmtldTJDS3N4eWlDYmR0MUd0ZUtqcmkxYjV0UGZj',
'slave_user': 'gh_19182aefb42a',
'xid': '081913df3456544c4dc84a51fd52778f',
'_clsk': '121cm1q|1716519674628|15|1|mp.weixin.qq.com/weheat-agent/payload/record',
}
headers = {
'accept': '*/*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
# 'cookie': 'appmsglist_action_3948617697=card; ua_id=cPS3GpAA01IEkaRJAAAAAIvDxBMaEL0YwwkNCjBwcAQ=; wxuin=00617100352084; mm_lang=zh_CN; pac_uid=0_6f1a31a07c4ab; iip=0; _qimei_uuid42=17c1a0b23191007d54d4e4bc638bde211f0338f3bf; _qimei_q36=; _qimei_h38=8f95287254d4e4bc638bde2102000002517c1a; RK=jTHYN6T3Wp; ptcz=7345f2bcdd021ede2b9e3b5ff3857a614e8f78a9ecdf01650aa9a3a225afd21e; pgv_pvid=8536395802; ts_uid=6019633394; __root_domain_v=.weixin.qq.com; _qddaz=QD.243806759066417; qq_domain_video_guid_verify=6e9c8245aad0e837; _qimei_fingerprint=36d8e5c4ef2b920cd2da41f5f01ca167; _clck=3902705164|1|fm1|0; uuid=4f9478c2739d6acbb0878a2e7b6c7b35; rand_info=CAESINjnm2X0Xw6se5Kiw4ayZI9Ft4uFGZEaPM8tGhG8HhAl; slave_bizuin=3902705164; data_bizuin=3902705164; bizuin=3902705164; data_ticket=DJqUc+FKg56UrvBm8mHaCSI28Je1eBjufcd/Bb1OMvhzcoXTTFoXRMrQIbNGjKtA; slave_sid=cG5yOWQzc0JrX3BNejZmMEhZWG5yN1JFZ1lzMzVWbW85aDZVRHpuSmw2UGVyaTczRFozdGFDMWpvd2ZQckhMbm5tX0pNc1FkcWNBX3VnbEFDZ29pZ3JLNW5hTEdqbm9ROXIyX01GMW5TeUYzQ2RhbUdoZmtldTJDS3N4eWlDYmR0MUd0ZUtqcmkxYjV0UGZj; slave_user=gh_19182aefb42a; xid=081913df3456544c4dc84a51fd52778f; _clsk=121cm1q|1716519674628|15|1|mp.weixin.qq.com/weheat-agent/payload/record',
'referer': 'https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=77&createType=0&token=1635832127&lang=zh_CN×tamp=1716519674285',
'sec-ch-ua': ''Google Chrome';v='123', 'Not:A-Brand';v='8', 'Chromium';v='123'',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': ''Windows'',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
'x-requested-with': 'XMLHttpRequest',
}
params = {
'sub': 'list',
'search_field': 'null',
'begin': f'{5*page}',
'count': '5',
'query': '',
'fakeid': 'MzkyMjY2MjMwOQ==',
'type': '101_1',
'free_publish_type': '1',
'sub_action': 'list_ex',
'token': '1635832127',
'lang': 'zh_CN',
'f': 'json',
'ajax': '1',
}
print(params)
response = requests.get('https://mp.weixin.qq.com/cgi-bin/appmsgpublish', params=params, cookies=cookies, headers=headers)
resp = response.json()['publish_page']
# print(response.json())
resp = json.loads(resp)
print(len(resp['publish_list']))
for i in resp['publish_list']:
article_links = []
art_info = json.loads(i['publish_info'])
art_title = art_info['appmsgex'][0]['title']
art_time = art_info['appmsgex'][0]['create_time']
art_date = date = time.strftime('%Y-%m-%d', time.localtime(art_time))
art_link = art_info['appmsgex'][0]['link']
a_info = {
'url': art_link,
'title': art_title,
'time': art_date
}
article_links.append(a_info)
return article_links
article_links= []
foriinrange(7):#7是微信公衆号文章頁數
page_link = crawl_all_article_url(i)
print(page_link)
article_links = article_links + page_link
time.sleep(5)
爬取所有文章并存儲為PDF格式
得到文章所有的url之後下一步就是爬取文章的具體内容了,在這裡要用到接口,直接pip 安裝會存在依賴庫版本問題,主要是庫的版本不對,總是報錯,我在這個地方卡了兩天,直到試到版本==0.11.15 才成功,需要你做的是:
pip # 依賴庫默認是3.0.3版本,但是會報各種錯誤pip3 ==0.11.15 # 安裝正确版本
import pdfkit
import wechatsogou
def link_to_pdf(url, title, date):
ws_api = wechatsogou.WechatSogouAPI(captcha_break_time=3) # 調用接口
content_info = ws_api.get_article_content(url) # 請求鍊接
content = content_info['content_html'] # 轉換為html格式
# 将标題和文章内容放入如下html中處理一下
html = f'''
{title}
{title}
{content}
'''
# wkhtmltopdf可執行程序路徑
path_wkthmltopdf = r'D:\software-dir\wkhtmltox\bin\wkhtmltopdf.exe'
config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf) # 配置pdfkit
pdfkit.from_string(html, f'{title} {date}.pdf',
configuration=config) # 轉PDF,并按設定好的命名文件
print(f'{title}.pdf 已下載')
forlinkinarticle_links:
url = link['url']
title = link['title']
date = link['time']
link_to_pdf(url, title, date)
有話要說...