如何批量下载指定序列URL对应的网页为PDF文件?
批量将固定格式网页转为PDF的实现方案
方法一:Python + Chrome无头模式(推荐,贴近Chrome原生打印效果)
利用Chrome的无头模式模拟手动打印为PDF的操作,适合有Python基础的用户,能完美还原Chrome渲染的页面效果。
步骤:
- 安装依赖
pip install selenium
同时确保Chrome浏览器已安装,并下载与Chrome版本匹配的ChromeDriver(可放在Python环境路径或代码同目录)。
- 批量处理代码示例
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import os # 替换为你的实际参数 SITE = "your-site" STUFF = "your-stuff" START_NUM = 1 # 起始number END_NUM = 50 # 结束number SAVE_DIR = "pdf_results" # 创建保存目录 if not os.path.exists(SAVE_DIR): os.makedirs(SAVE_DIR) # 配置Chrome无头模式 chrome_options = Options() chrome_options.add_argument("--headless=new") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") # 启动浏览器 driver = webdriver.Chrome(options=chrome_options) wait = WebDriverWait(driver, 10) # 最长等待10秒加载页面 try: for num in range(START_NUM, END_NUM + 1): url = f"https://www.{SITE}.com/{STUFF}/{num}" driver.get(url) # 等待页面核心内容加载完成(可根据页面实际元素调整,比如等待正文容器出现) wait.until(EC.presence_of_element_located((By.TAG_NAME, "body"))) # 调用Chrome打印API生成PDF pdf_path = os.path.join(SAVE_DIR, f"page_{num}.pdf") driver.execute_cdp_cmd("Page.printToPDF", { "path": pdf_path, "format": "A4", "printBackground": True, # 打印背景图片 "isHeaderFooterEnabled": False, # 去掉页眉页脚 "marginTop": 0, "marginBottom": 0 }) print(f"已生成:{pdf_path}") finally: driver.quit()
方法二:Python + wkhtmltopdf(轻量无浏览器依赖)
使用开源的网页转PDF工具wkhtmltopdf,通过Python调用命令行实现批量处理,无需安装Chrome。
步骤:
- 安装
wkhtmltopdf(根据系统下载对应版本),并确保其可执行文件在系统PATH中,或在代码中指定全路径。 - 批量处理代码示例
import os import subprocess # 替换为你的实际参数 SITE = "your-site" STUFF = "your-stuff" START_NUM = 1 END_NUM = 50 SAVE_DIR = "pdf_results" WKHTML_PATH = "wkhtmltopdf" # Windows下示例:"C:/Program Files/wkhtmltopdf/bin/wkhtmltopdf.exe" if not os.path.exists(SAVE_DIR): os.makedirs(SAVE_DIR) for num in range(START_NUM, END_NUM + 1): url = f"https://www.{SITE}.com/{STUFF}/{num}" pdf_path = os.path.join(SAVE_DIR, f"page_{num}.pdf") # 调用wkhtmltopdf命令 cmd = [ WKHTML_PATH, "--no-header-footer", "--print-media-type", "--load-error-handling", "ignore", url, pdf_path ] subprocess.run(cmd, check=True) print(f"已生成:{pdf_path}")
注意事项
- 动态页面处理:如果页面包含JS渲染的内容,方法一的Chrome无头模式兼容性更好;方法二可添加
--javascript-delay 3000参数延迟3秒等待渲染。 - 反爬规避:可在请求中添加自定义User-Agent,必要时配合代理IP(selenium可通过
add_argument('--proxy-server=ip:port')设置)。 - 格式优化:可根据需求调整PDF的页面尺寸、边距等参数,具体参考Chrome
Page.printToPDFAPI文档或wkhtmltopdf命令行参数。
内容的提问来源于stack exchange,提问作者CoccoBlu
相关产品推荐
相关产品推荐

