前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >苏生不惑又写了个小工具

苏生不惑又写了个小工具

作者头像
苏生不惑
发布2023-02-06 16:00:52
4810
发布2023-02-06 16:00:52
举报
文章被收录于专栏:苏生不惑

苏生不惑第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

所有音频也下载了:

如果是批量下载文章里的音频/视频可以使用我开发的这个小工具我又开发了个公众号音频视频和话题批量下载工具,效果:

话题下的音频也支持,代码如下:

代码语言:javascript
复制
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:

代码如下:

代码语言:javascript
复制
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合并成一个文件并生成书签。

代码如下,我打包成工具了,在公众号后台对话框回复 公众号

代码语言:javascript
复制
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,包含书签名和页码。

代码如下:

代码语言:javascript
复制
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)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 苏生不惑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档