本文目录导读:

- 方法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脚本
选择最适合你需求的方案!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播