将打开的网页批量保存为PDF(python) 您所在的位置:网站首页 python下载bs4模块 将打开的网页批量保存为PDF(python)

将打开的网页批量保存为PDF(python)

2023-06-19 06:15| 来源: 网络整理| 查看: 265

省力,但不多,需要安装python模块bs4和工具wkhtmltopdf

1. 在cmd运行以下命令安装bs4

pip install bs4 -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 安装工具wkhtmltopdf,并将安装目录下的bin目录添加到环境变量

下载地址:https://wkhtmltopdf.org/downloads.html

文件管理器-此电脑右键属性-高级系统设置-环境变量-系统变量-变量path

 3. 右键浏览器标签栏,将打开的网页全部保存到收藏夹然后导出

4. 编辑导出的html文件,只保留需要的链接

5. 将html文件和pdf.py放到同一个目录下,并在当前目录新建文件夹命名为pdf,注意更换代码中的html文件名(bookmarks.html)

# pdf.py from bs4 import BeautifulSoup import re import subprocess # 将html文件中链接的url和标题提取出来分别保存在urls.txt和titles.txt文件中,注意更换html文件名(bookmarks.html) # 读取 HTML 文件内容 with open('bookmarks.html', 'r', encoding='utf-8') as f: html_str = f.read() # 解析 HTML 字符串 soup = BeautifulSoup(html_str, 'html.parser') # 获取所有的链接列表 links = soup.find_all('a') # 将链接 URL 和标题保存到文件中 with open('urls.txt', 'w', encoding='utf-8') as f1, open('titles.txt', 'w', encoding='utf-8') as f2: for link in links: url = link.get('href') title = link.string # 写入链接 URL 和标题到文件中 f1.write(url + '\n') f2.write(title + '\n') # 批量更改文件名——在 Windows 系统中文件名不能有以下字符:< (小于号)> (大于号): (冒号)" (双引号)/ (正斜杠)\ (反斜杠)| (竖线)? (问号)* (星号),并且后续批量执行命令时文件名中不能有空格 # 打开文件 with open('titles.txt', 'r', encoding='utf-8') as f: lines = f.readlines() # 转换文件名 for i in range(len(lines)): # 去除行尾换行符 line = lines[i].rstrip('\n') # 替换非法字符 line = re.sub(r"[:\"/\\|?*\s]+", "_", line) # 确保文件名不为空 if not line: continue # 保存到同一文件 lines[i] = line + '\n' with open('titles.txt', 'w', encoding='utf-8') as f: f.writelines(lines) # 检查是否有重复标题——如果重复标题对应的是同一网页可以跳过重复标题检查,否则前面生成的pdf会被后面生成的同名pdf覆盖 with open('titles.txt', 'r', encoding='utf-8') as f: lines = f.readlines() for i in range(len(lines)): for j in range(i+1, len(lines)): if lines[i] == lines[j]: print(f'第{i+1}和第{j+1}个pdf文件的标题重复——') print(lines[i]) print("如果重复标题对应的是不同网页建议修改titles.txt文件,否则会导致前面生成的同名pdf文件被覆盖,对应相同网页则无需修改") print("按回车键继续...") input() print("文件将保存在当前目录的pdf文件夹中,请提前创建") print() # 利用前面得到的url.txt和titles.txt批量执行wkhtmltopdf命令 # 读取网址文件和文件名文件 with open('urls.txt', 'r', encoding='utf-8') as f: urls = f.readlines() with open('titles.txt', 'r', encoding='utf-8') as f: titles = f.readlines() # 批量执行 wkhtmltopdf 命令 for url, title in zip(urls, titles): # 删除换行符 url = url.strip() title = title.strip() print("正在生成“" + title + ".pdf”...") # 构造命令 cmd = 'wkhtmltopdf {} ./pdf/{}.pdf'.format(url, title) # 执行命令 subprocess.call(cmd, shell=True) print("程序已经运行完毕,请按回车键退出...") input()



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有