You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求替代wget的多页面抓取工具(支持镜像及链接转换)

替代wget镜像抓取的工具推荐

以下几种工具/方案可以替代wget的--mirror和--convert-links功能,同时能绕过网站对wget的屏蔽:

1. cURL + Shell脚本组合

既然你已经能用cURL抓取单个页面,可通过简单脚本实现递归抓取与链接转换,完全自定义请求参数(比如修改User-Agent模拟浏览器):

#!/bin/bash
# 配置目标网站与存储目录
BASE_URL="https://your-target-site.com"
MIRROR_DIR="./site-mirror"

mkdir -p "$MIRROR_DIR"
cd "$MIRROR_DIR"

# 抓取初始页面
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" -o index.html "$BASE_URL"

# 提取相对链接并批量抓取
grep -E 'href="[^"]+"' index.html | sed -E 's/href="([^"]+)"/\1/' | grep -v '^http' | while read -r link; do
  # 拼接完整URL并抓取
  FULL_URL="$BASE_URL/$link"
  # 创建文件目录(如果需要)
  mkdir -p "$(dirname "$link")"
  curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" -o "$link" "$FULL_URL"
done

# 将页面内的绝对链接转换为本地相对链接
sed -i 's/href="\/\([^"]*\)"/href="\1"/g' *.html

这个方案的优势是轻量、无额外依赖,可根据网站反爬规则灵活调整请求头。

2. httrack

这是一款专门的网站镜像工具,功能与wget的镜像模式高度重合,支持递归抓取、自动转换本地链接,且可自定义请求标识绕过屏蔽:

  • 基础镜像命令:
httrack https://your-target-site.com -O ./site-mirror -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" -v

参数说明:

  • -O:指定镜像文件存储目录
  • -U:设置自定义User-Agent,模拟浏览器请求
  • -v:显示抓取进度

httrack还支持设置抓取深度、排除特定文件类型、断点续传等,功能全面,无需自行编写复杂脚本。

3. Python脚本(Requests + BeautifulSoup)

如果你熟悉Python的Requests库,可以编写自定义脚本实现递归抓取与链接转换,完全掌控抓取逻辑,应对复杂反爬场景:

import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse

# 配置参数
BASE_URL = "https://your-target-site.com"
SAVE_DIR = "./site-mirror"
HEADERS = {
    "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"
}

crawled_urls = set()
os.makedirs(SAVE_DIR, exist_ok=True)

def fetch_and_save(url):
    if url in crawled_urls:
        return
    crawled_urls.add(url)
    
    # 发送请求
    response = requests.get(url, headers=HEADERS)
    response.raise_for_status()
    
    # 解析URL,确定本地存储路径
    parsed_url = urlparse(url)
    file_path = parsed_url.path.lstrip("/")
    if not file_path:
        file_path = "index.html"
    full_save_path = os.path.join(SAVE_DIR, file_path)
    os.makedirs(os.path.dirname(full_save_path), exist_ok=True)
    
    # 转换页面内的链接为本地相对路径
    soup = BeautifulSoup(response.text, "html.parser")
    for tag in soup.find_all(["a", "img", "link", "script"], href=True):
        original_href = tag["href"]
        absolute_url = urljoin(url, original_href)
        if absolute_url.startswith(BASE_URL):
            # 计算本地相对路径
            target_parsed = urlparse(absolute_url)
            target_path = target_parsed.path.lstrip("/") or "index.html"
            relative_path = os.path.relpath(
                os.path.join(SAVE_DIR, target_path),
                os.path.dirname(full_save_path)
            )
            tag["href"] = relative_path
    
    # 保存转换后的页面
    with open(full_save_path, "w", encoding="utf-8") as f:
        f.write(str(soup))
    
    # 递归抓取页面内的其他内部链接
    for a_tag in soup.find_all("a", href=True):
        next_url = urljoin(url, a_tag["href"])
        if next_url.startswith(BASE_URL):
            fetch_and_save(next_url)

# 启动抓取
fetch_and_save(BASE_URL)

这个方案适合需要处理复杂反爬(如添加Cookie、使用代理)的场景,可根据需求扩展功能。

内容的提问来源于stack exchange,提问作者Loodle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:43:08