查看原文
其他

一键批量下载微信公众号文章内容/图片/封面/视频/音频,支持导出html和pdf格式,包含阅读数/点赞数/在看数

苏生不惑 苏生不惑 2022-08-04

苏生不惑第314篇原创文章,将本公众号设为星标,第一时间看最新文章。

之前分享过听说公众号深圳卫健委被网友投诉尺度大,我抓取了所有文章标题和阅读数分析了下  ,后来发现这个号的封面图真有意思,于是批量下载了所有封面图,如果有需要在公众号后台对话框回复 封面 获取所有封面图的网盘地址。

所有封面图的文件名为文章发布日期加标题,方便搜索。于是顺便再研究了下批量下载公众号文章内容,图片,视频和音频,文章内容支持导出HTML,pdf格式,以我的公众号为例,共300多篇原创文章,很快就下载完了,下载详情见之前文章一键下载公众号所有文章,导出文件支持PDF,HTML,Markdown,Excel,chm等格式 ,如果你有需要抓取下载的公众号在后台微信联系我。生成的所有历史文章列表pdf文件,包括文章发布时间,文章作者,文章简介和文章链接,需要找哪篇文章ctrl+f搜索后打开就行,比在微信里搜索方便多了。还有markdown格式文件。以及excel数据文件(这里用的是公众号深圳卫健委的数据),包括发布日期,文章标题,文章链接,文章简介,文章作者,阅读数,在看数和点赞数,按文章阅读数排序可以很方便的知道哪些文章受欢迎。

下载的html文件可以用谷歌浏览器打开,即使文章被删了在本地也能继续看。再用python脚本将html批量转为pdf文件。

def export_pdf():
    import pdfkit,os
    print('导出 PDF...')
    htmls = []
    for root, dirs, files in os.walk('.'):
     for name in files:
      if name.endswith(".html"):
       print(name)
       try:
         pdfkit.from_file(name, 'pdf/'+name.replace('.html''')+'.pdf')
       except Exception as e:
             print(e)
export_pdf()

转换后的pdf文件比html文件大。

因为我的文章不发音频,这里以默默道来这个号为例,单篇文章隧道里的光 的音频可以用idm直接下载。音频链接文件格式为https://res.wx.qq.com/voice/getvoice?mediaid=xxx ,于是用正则匹配就能批量下载音频了。

def audio(res,headers,date,title):
    aids = re.findall(r'"voice_id":"(.*?)"',res.text)
    time.sleep(2)
    tmp = 0
    for id in aids:
        tmp +=1
        url = f'https://res.wx.qq.com/voice/getvoice?mediaid={id}'
        audio_data = requests.get(url,headers=headers)
        print('正在下载音频:'+title+'.mp3')
        with open(date+'___'+title+'___'+str(tmp)+'.mp3','wb'as f:
            f.write(audio_data.content)

批量下载音频效果:下载的音频文件名为文章发布时间+文章标题.mp3,也是方便搜索。

同样我的公众号也不发视频,这里以阿斗归来了这个号为例,单篇文章神雕侠侣,绝迹江湖!金庸经典武侠《神雕侠侣》大结局 的视频也可以用idm下载。视频链接也是有规律的,同样通过正则匹配来批量下载视频:

def video(res, headers):
    vid = re.search(r'wxv_.{19}',res.text).group(0)
    time.sleep(2)
    if vid:
        url = f'https://mp.weixin.qq.com/mp/videoplayer?action=get_mp_video_play_url&preview=0&vid={vid}'
        data = requests.get(url,headers=headers).json()
        video_url = data['url_info'][0]['url']
        video_data = requests.get(video_url,headers=headers)
        print('正在下载视频:'+trimName(data['title'])+'.mp4')
        with open(trimName(data['title'])+'.mp4','wb'as f:
            f.write(video_data.content)

批量下载视频效果:下载的视频如图:如果文章里用的是视频号里的视频,这个只能抓包单个下载,目前还没研究出如何批量下载视频号,这里以前几天西城男孩视频号的视频为例,抓包就能获取视频下载地址。

最后说下批量下载文章里的图片,也是正则匹配图片链接批量下载:

def imgs(content,headers,date,position,title):
    imgs=re.findall('data-src="(.*?)"',content)
    time.sleep(2)
    num = 0
    for i in imgs:
        num+=1
        img_data = requests.get(i,headers=headers)
        print('正在下载图片:'+i)
        with open(date+'___'+title+'___'+str(position)+'___'+str(num)+'.jpg','wb'as f:
            f.write(img_data.content)

批量下载图片效果:

下载的图片文件名为文章发布时间加文章标题和数字:

最近原创文章:

分享几个实用的 chrome 和 edge 扩展

百度网盘青春版未推出前,使用这个网盘高速下载工具

除了跳过 app 启动广告,这个 app 还能帮你自动收集支付宝蚂蚁森林能量

每天自动签到b站快速升级LV6

分享几个 Windows 实用技巧

分享几个油猴脚本神器

网易云音乐每天自动听歌300首升级LV10,b站每天自动签到升级LV6,京东每天自动签到领京豆,微信运动每天自动修改步数

分享几个音乐神器 APP,免费听全网音乐,一键解锁网易云音乐变灰歌曲

2021 一键下载百度文库/豆丁/道客巴巴文档

微信神器:一键批量下载微信好友头像并拼成一张图

2021 年 一键修改微信运动步数

如果文章对你有帮助还请 点赞/在看/分享 三连支持下, 感谢各位!

公众号苏生不惑

扫描二维码关注或搜索微信susheng_buhuo


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存