苏生不惑第
371
篇原创文章,将本公众号设为星标
,第一时间看最新文章。
之前分享过我写的一些工具整理下苏生不惑开发过的那些软件和脚本,不过导出的公众号pdf文件太多想合并成一个,于是用PDFShaper合并pdf,但合并后的pdf没有书签:
于是用python写了个pdf合并工具,这里以莫言的公众号文章为例,先下载他的所有公众号文章,详情见我之前的文章 一键批量下载微信公众号文章内容/图片/封面/视频/音频,支持导出html和pdf格式,包含阅读数/点赞数/在看数/留言数 ,导出的文章数据包含文章日期,文章标题,文章链接,文章简介,文章作者,文章封面图,是否原创,IP归属地,阅读数,在看数,点赞数和留言数等,看IP归属地莫言在上海:
文章也同步到博客了 https://blog-susheng.vercel.app/#/wechat/%E5%85%AC%E4%BC%97%E5%8F%B7%E8%8E%AB%E8%A8%80%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0
所有音频也下载了:
如果是批量下载文章里的音频/视频可以使用我开发的这个小工具我又开发了个公众号音频视频和话题批量下载工具,效果:
话题下的音频也支持,代码如下:
topic_url='xxx'
biz=re.search(r'__biz=(.*?)&',topic_url).group(1)
album_id=re.search(r'album_id=(.*?)&',topic_url).group(1)
response = requests.get(topic_url, headers=headers)
voiceids = re.findall('data-voiceid="(.*)"',response.text)
msgids = re.findall('data-msgid="(.*)"',response.text)
links = re.findall('data-link="(.*)"',response.text)
titles = re.findall('data-title="(.*)" data-voiceid',response.text)
print(titles,len(voiceids))
for i,j in zip(titles,voiceids):
voice_url = f'https://res.wx.qq.com/voice/getvoice?mediaid={j}'
# print(i,voice_url)
audio_data = requests.get(voice_url,headers=headers)
print('正在下载音频:'+i+'.mp3')
with open(i+'.mp3','wb') as f:
f.write(audio_data.content)
sys.exit(1)
下载效果:
下载的文章html先转换成pdf:
代码如下:
def to_pdf():
import pdfkit
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)
def to_word():
print('导出 word...')
htmls = []
for root, dirs, files in os.walk('.'):
for name in files:
if name.endswith(".pdf"):
print(name)
try:
cv = Converter(name)
cv.convert('word/'+name.replace('.pdf', '')+'.docx')
cv.close()
except Exception as e:
print(e)
to_pdf()
# to_word()
然后将转换的pdf合并成一个文件并生成书签。
代码如下,我打包成工具了,在公众号后台对话框回复 公众号
:
import logging,os,html
from PyPDF2 import PdfFileReader, PdfFileWriter,PdfFileMerger
file_writer = PdfFileWriter()
merger = PdfFileMerger()
num = 0
for root, dirs, files in os.walk('.'):
for name in files:
if name.endswith(".pdf"):
print(name)
file_reader = PdfFileReader(f"{name}")
file_writer.addBookmark(html.unescape(name).replace('.pdf',''), num, parent=None)
for page in range(file_reader.getNumPages()):
num += 1
file_writer.addPage(file_reader.getPage(page))
with open(r"公众号苏生不惑历史文章合集.pdf",'wb') as f:
file_writer.write(f)
合并后的效果:
点击左侧书签跳转到对应文章pdf(含留言):
当然也可以导出pdf的书签到excel,包含书签名和页码。
代码如下:
def bookmark_export(lines):
bookmark = ''
for line in lines:
if isinstance(line, dict):
bookmark += line['/Title'] + ','+str(line['/Page']+1)+'\n'
else:
bookmark_export(line)
return bookmark
with open('公众号苏生不惑历史文章合集.pdf', 'rb') as f:
lines = PdfFileReader(f).getOutlines()
bookmark = bookmark_export(lines)
with open('公众号苏生不惑历史文章合集.csv', 'a+', encoding='utf-8-sig') as f:
f.write(bookmark)