自动保存网页为文档的脚本

wen 实用脚本 1

本文目录导读:

自动保存网页为文档的脚本

  1. 方法1:使用Python + Selenium(处理动态网页)
  2. 方法2:使用Python + Requests(静态网页)
  3. 方法3:保存为PDF(使用Playwright)
  4. 方法4:命令行脚本(使用wget)
  5. 安装依赖
  6. 使用建议

我来帮你创建一个自动保存网页为文档的脚本,这里提供几种常用的方法:

方法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

使用建议

  1. 动态网站:使用Selenium或Playwright
  2. 静态网站:使用Requests + BeautifulSoup
  3. 需要打印格式:保存为PDF
  4. 批量爬取:使用wget脚本

选择最适合你需求的方案!

抱歉,评论功能暂时关闭!