本文目录导读:

- 方法1:使用Python + Selenium(处理动态网页)
- 方法2:使用Python + Requests(静态网页)
- 方法3:保存为PDF(使用Playwright)
- 方法4:命令行脚本(使用wget)
- 安装依赖
- 使用建议
我来帮你创建一个自动保存网页为文档的脚本,这里提供几种常用的方法:
方法1:使用Python + Selenium(处理动态网页)
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import os
from datetime import datetime
def save_webpage_as_html(url, output_dir="saved_pages"):
"""
自动保存网页为HTML文档
"""
# 创建输出目录
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 配置Chrome选项
chrome_options = Options()
chrome_options.add_argument('--headless') # 无头模式
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--window-size=1920,1080')
# 初始化driver
driver = webdriver.Chrome(options=chrome_options)
try:
# 访问网页
driver.get(url)
# 等待页面加载
time.sleep(3)
# 获取页面HTML
html_content = driver.page_source
# 生成文件名
filename = f"{datetime.now().strftime('%Y%m%d_%H%M%S')}_{url.replace('https://', '').replace('http://', '').replace('/', '_')[:30]}.html"
filepath = os.path.join(output_dir, filename)
# 保存HTML文件
with open(filepath, 'w', encoding='utf-8') as f:
f.write(html_content)
print(f"✅ 网页已保存: {filepath}")
return filepath
except Exception as e:
print(f"❌ 保存失败: {str(e)}")
return None
finally:
driver.quit()
# 批量保存示例
def save_multiple_pages(urls):
results = []
for i, url in enumerate(urls, 1):
print(f"正在保存第 {i}/{len(urls)} 个网页...")
result = save_webpage_as_html(url)
if result:
results.append(result)
time.sleep(2) # 避免请求过快
print(f"\n📁 已保存 {len(results)} 个网页")
return results
# 使用示例
if __name__ == "__main__":
# 单个网页
save_webpage_as_html("https://example.com")
# 批量网页
urls = [
"https://example.com/page1",
"https://example.com/page2"
]
save_multiple_pages(urls)
方法2:使用Python + Requests(静态网页)
import requests
from bs4 import BeautifulSoup
import os
from datetime import datetime
import re
def save_static_page(url, output_dir="saved_static_pages"):
"""
保存静态网页为HTML文档
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
try:
# 发送请求
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
response = requests.get(url, headers=headers, timeout=30)
response.raise_for_status()
# 设置编码
if response.encoding == 'ISO-8859-1':
response.encoding = 'utf-8'
# 获取HTML内容
html_content = response.text
# 提取标题用于文件名
soup = BeautifulSoup(html_content, 'html.parser')
title = soup.title.string.strip() if soup.title else "untitled"
# 清理标题中的非法字符
title = re.sub(r'[<>:"/\\|?*]', '_', title)
# 生成文件名
filename = f"{datetime.now().strftime('%Y%m%d')}_{title[:30]}.html"
filepath = os.path.join(output_dir, filename)
# 保存文件
with open(filepath, 'w', encoding='utf-8') as f:
f.write(html_content)
print(f"✅ 已保存: {filepath}")
return filepath
except Exception as e:
print(f"❌ 保存 {url} 失败: {str(e)}")
return None
# 使用:
# save_static_page("https://example.com")
方法3:保存为PDF(使用Playwright)
import asyncio
from playwright.async_api import async_playwright
import os
from datetime import datetime
async def save_page_as_pdf(url, output_dir="saved_pdfs"):
"""
将网页保存为PDF文档
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
async with async_playwright() as p:
# 启动浏览器
browser = await p.chromium.launch(
headless=True,
args=['--no-sandbox', '--disable-dev-shm-usage']
)
# 创建新页面
page = await browser.new_page()
try:
# 访问网页
await page.goto(url, wait_until='networkidle', timeout=30000)
# 等待页面完全加载
await page.wait_for_load_state('networkidle')
# 生成文件名
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
filename = f"{timestamp}.pdf"
filepath = os.path.join(output_dir, filename)
# 保存为PDF
await page.pdf(
path=filepath,
format='A4',
print_background=True,
margin={
'top': '20px',
'bottom': '20px',
'left': '20px',
'right': '20px'
}
)
print(f"✅ PDF已保存: {filepath}")
return filepath
except Exception as e:
print(f"❌ 保存失败: {str(e)}")
return None
finally:
await browser.close()
# 使用示例
async def main():
urls = [
"https://example.com",
"https://example.com/document"
]
for url in urls:
print(f"正在处理: {url}")
await save_page_as_pdf(url)
# 运行
# asyncio.run(main())
方法4:命令行脚本(使用wget)
#!/bin/bash
# save_webpages.sh
# 创建保存目录
mkdir -p saved_pages
# 定义URL列表文件
urls_file="urls.txt"
# 读取URL列表并保存
while IFS= read -r url; do
if [ -n "$url" ]; then
echo "正在保存: $url"
wget \
--recursive \
--page-requisites \
--convert-links \
--adjust-extension \
--no-parent \
--directory-prefix=saved_pages \
--timeout=30 \
--tries=3 \
--no-check-certificate \
"$url"
fi
done < "$urls_file"
echo "✅ 所有网页已保存完成"
安装依赖
# 安装Python依赖 pip install selenium playwright requests beautifulsoup4 # 安装Playwright浏览器 playwright install chromium # 安装Selenium需要的ChromeDriver # 或使用WebDriver Manager: pip install webdriver-manager
使用建议
- 动态网站:使用Selenium或Playwright
- 静态网站:使用Requests + BeautifulSoup
- 需要打印格式:保存为PDF
- 批量爬取:使用wget脚本
选择最适合你需求的方案!