文章一键采集工具(批量下载公众号文章内容有意思文件比html文件大的应用)
优采云 发布时间: 2022-01-04 03:04文章一键采集工具(批量下载公众号文章内容有意思文件比html文件大的应用)
之前分享过,后来发现这个账号的封面真的很有趣,于是批量下载了所有的封面。如有需要,请在公众号后台对话框回复封面,获取所有封面图的网盘地址。
所有封面图片的文件名都是文章发布日期加标题,方便查找。
所以顺便研究了一下公众号的内容、图片、视频、音频的批量下载文章。 文章 的内容支持以 HTML 和 pdf 格式导出。以我的公众号为例,一共300多个。文章原创文章,下载即将完成,下载详情请参考前面的文章,如需抢下载官方账号,请微信联系我背景。
所有生成的历史文章列表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下载。
音频链接文件格式,可以批量下载音频,定时匹配。
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)
批量下载音效:
下载的音频文件名为文章发布时间+文章title.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)
批量下载图片的效果:
下载的图片文件名是文章发布时间加上文章标题和编号: