离线使用网站抓取终极指南:20 大方法
用于离线查看的网站抓取是内容存档者、研究人员、使用 AI 的开发人员或任何需要在不依赖活跃互联网连接的情况下全面访问网站资源的人的重要工具。本指南探讨了抓取和保存网站的 20 大方法,可保存为各种格式,如纯 HTML、Markdown、JSON 等,以满足各种需求,包括静态网站生成、以可读性为重点的存档以及 AI 聊天机器人知识库。
1. 使用 Wget 抓取(另存为 HTML 以供离线查看)
Wget 是一款免费实用工具,用于非交互式地从 Web 下载文件。它支持下载整个网站,以便离线浏览。
脚本:
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://example.com
说明:
--mirror
:镜像整个网站。--convert-links
:转换链接以使其适合离线查看。--adjust-extension
:为文件添加正确的扩展名。--page-requisites
:下载显示网页所需的所有资源。--no-parent
:将下载限制在指定 URL 的子目录。
2. 使用 HTTrack 抓取(网站到本地目录)
HTTrack 允许您将万维网站点从 Internet 下载到本地目录,递归地构建所有目录,从服务器获取 HTML、图像和其他文件到您的计算机。
脚本:
httrack "http://example.com" -O "/path/to/local/directory" "+*.example.com/*" -v
说明:
-O "/path/to/local/directory"
:指定输出路径。"+*.example.com/*"
:允许来自 example.com 任何子域的任何文件。-v
:详细模式。
3. 将网站保存为 Markdown
Pandoc 可用于将 HTML 文件转换为 Markdown。此方法有利于可读性和编辑目的。
脚本:
wget -O temp.html http://example.com && pandoc -f html -t markdown -o output.md temp.html
说明:
- 首先,网页作为 HTML 下载。
- 然后,Pandoc 将 HTML 文件转换为 Markdown 格式。
4. 使用 SingleFile 存档网站
SingleFile 是一个浏览器扩展,可帮助您将完整的网页(包括 CSS、JavaScript、图像)保存为单个 HTML 文件。
用法:
- 从浏览器扩展商店安装 SingleFile。
- 导航到您希望保存的页面。
- 点击 SingleFile 图标保存页面。
5. 将网站转换为 JSON 以供 AI 使用(使用 Node.js)
自定义 Node.js 脚本可以从 HTML 中提取文本并将其保存为 JSON 格式,这对于将数据输入 AI 模型或聊天机器人非常有用。
脚本:
const axios = require('axios');
const fs = require('fs');
axios.get('http://example.com').then((response) => {
const data = {
title: response.data.match(/<title>(.*?)<\/title>/)[1],
content: response.data.match(/<body>(.*?)<\/body>/s)[1].trim()
};
fs.writeFileSync('output.json', JSON.stringify(data));
});
说明:
- 使用 axios 获取网页。
- 使用正则表达式提取标题和正文内容。
- 将提取的内容保存为 JSON。
6. 下载网站以进行静态博客部署
使用 wget 和 Jekyll,您可以下载网站并准备将其部署为静态博客。
脚本:
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://example.com
jekyll new myblog
mv example.com/* myblog/
cd myblog
jekyll serve
说明:
- 如前所述下载网站。
- 创建一个新的 Jekyll 博客。
- 将下载的文件移动到 Jekyll 目录。
- 在本地提供静态博客服务。
7. 将 HTML 转换为 ePub 或 PDF 以供电子书阅读器使用
Calibre 是一个强大的工具,可以将 HTML 和网站转换为 ePub 或 PDF 格式,适用于电子阅读器。
命令行用法:
ebook-convert input.html output.epub
说明:
- 使用 Calibre 的命令行工具将 HTML 文件转换为 ePub 文件。
8. 创建网站的可读性重点版本
使用 Readability JavaScript 库,您可以从网站中提取主要内容,去除广告和侧边栏等杂乱内容。
脚本:
<script src="readability.js"></script>
<script>
var documentClone = document.cloneNode(true);
var article = new
Readability(documentClone).parse();
console.log(article.content);
</script>
说明:
- 克隆当前文档。
- 使用 Readability 提取并打印主要内容。
9. 使用 Webrecorder 将网站保存为完全交互式镜像
Webrecorder 以保留所有交互元素(包括 JavaScript 和媒体播放)的方式捕获网页。
用法:
- 访问 Webrecorder.io
- 输入要捕获的网站 URL。
- 根据需要与网站交互以捕获动态内容。
- 将捕获下载为 WARC 文件。
10. 将网站存档为 Docker 容器(使用 Dockerize)
通过创建提供网站静态版本的 Docker 容器,将您的网站 Dockerize。此方法可确保环境完全保持原样。
Dockerfile:
FROM nginx:alpine
COPY ./site/ /usr/share/nginx/html/
说明:
- 使用轻量级 Nginx Alpine 镜像。
- 将下载的网站文件复制到 Nginx 文档根目录。
这些方法为希望有效保存、分析或重新利用 Web 内容的任何人提供了一套全面的工具包。无论是设置离线存档、为 AI 项目准备数据,还是为电子阅读器创建可移植副本,这些工具都提供了强大的解决方案,可根据您的意愿与数字内容进行交互。
以下综合比较表详细介绍了讨论过的 30 种网络抓取方法。此表旨在清晰地说明每个工具的优势、最佳用例和可访问性,以便用户轻松识别最适合其需求的工具。每个条目都包含必要的 URL、存储库链接、适用的 Docker 图像命令、输出格式以及带有可复制粘贴执行脚本的简洁设置步骤。
排序 | 工具/方法 | 最适合 | 输出格式 | 安装和设置脚本 | 使用脚本 | 优点 | Docker 命令 | 仓库/GitHub URL | 提供 GUI 吗? |
---|---|---|---|---|---|---|---|---|---|
1 | Browsertrix Crawler | 动态内容,JavaScript 密集型网站 | WARC、HTML、屏幕截图 | bash docker pull webrecorder/browsertrix-crawler:latest |
bash docker run -it --rm -v $(pwd)/crawls:/crawls browsertrix-crawler crawl --url http://example.com --text --depth 1 --scope all |
全面;捕获交互元素 | docker pull webrecorder/browsertrix-crawler:latest |
Browsertrix Crawler | 否 |
2 | Scrapy with Splash | 复杂的动态网站,AJAX | JSON、XML、CSV | bash pip install scrapy scrapy-splash; docker run -p 8050:8050 scrapinghub/splash |
python import scrapy; class ExampleSpider(scrapy.Spider): name = "example"; start_urls = ['http://example.com']; def parse(self, response): yield {'url': response.url, 'title': response.xpath('//title/text()').get()} |
处理 JavaScript;快速灵活 | docker run -p 8050:8050 scrapinghub/splash |
Scrapy-Splash | 否 |
3 | Heritrix | 大规模归档 | WARC | bash docker pull internetarchive/heritrix:latest; docker run -p 8443:8443 internetarchive/heritrix:latest |
通过 GUI 访问 https://:8443 | 尊重 robots.txt;广泛归档 | docker pull internetarchive/heritrix:latest |
Heritrix | 是 |
4 | HTTrack (GUI 版本) | 完整的网站下载 | HTML、相关文件 | 从 HTTrack 网站安装 | 基于 GUI 的设置 | 用户友好;递归下载 | 不适用 | HTTrack | 是 |
5 | Wget | 离线查看,简单镜像 | HTML、相关文件 | 大多数类 Unix 系统默认包含 | bash wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://example.com |
多功能且普遍 | 不适用 | 不适用 | 否 |
6 | ArchiveBox | 个人互联网档案 | HTML、JSON、WARC、PDF、屏幕截图 | bash docker pull archivebox/archivebox; docker run -v $(pwd):/data archivebox/archivebox init |
bash archivebox add 'http://example.com'; archivebox server 0.0.0.0:8000 |
自托管;广泛数据类型 | docker pull archivebox/archivebox |
ArchiveBox | 否 |
7 | Octoparse | 非程序员,数据提取 | CSV、Excel、HTML、JSON | 从 Octoparse 官网下载 | 使用内置模板或 UI 创建任务 | 可视化操作;处理复杂网站 | 不适用 | Octoparse | 是 |
8 | ParseHub | 机器学习,数据提取 | JSON、CSV、Excel | 从 ParseHub 下载 | 使用 UI 选择元素并提取数据 | 直观的基于 ML 的 GUI | 不适用 | ParseHub | 是 |
9 | Dexi.io (Ox |
ylabs) | 动态网页,实时数据 | JSON、CSV、XML | 在 Dexi.io 注册 | 通过在线仪表板或浏览器扩展配置 | 实时浏览器提取;基于云 | 不适用 | Dexi.io | 是 | | 10 | Scrapy | 网络抓取,数据挖掘 | JSON、XML、CSV、自定义 | bash pip install scrapy
| python import scrapy; class ExampleSpider(scrapy.Spider): name = "example"; allowed_domains = ['example.com']; start_urls = ['http://example.com']; def parse(self, response): yield {'url': response.url, 'body': response.text}
| 高度可定制;功能强大 | 不适用 | Scrapy | 否 | | 11 | WebHarvy | 点击式数据提取 | 文本、图像、URL | 从 WebHarvy 下载 | 基于 GUI 的选择 | 可视化内容识别 | 不适用 | WebHarvy | 是 | | 12 | Cyotek WebCopy | 部分网站复制 | HTML、CSS、图像、文件 | 从 Cyotek WebCopy 下载 | 使用 GUI 复制指定 URL 的网站 | 部分复制;自定义设置 | 不适用 | Cyotek WebCopy | 是 | | 13 | Content Grabber | 企业级抓取 | XML、CSV、JSON、Excel | 从 Content Grabber 下载 | 通过 UI 进行高级自动化 | 健壮;适用于大规模操作 | 不适用 | Content Grabber | 是 | | 14 | DataMiner | 浏览器中轻松进行数据抓取 | CSV、Excel | 从 DataMiner Chrome Extension 安装 | 使用配方或在浏览器扩展中创建新配方 | 用户友好;基于浏览器 | 不适用 | DataMiner | 是 | | 15 | FMiner | 高级网络抓取和网络爬虫 | Excel、CSV、数据库 | 从 FMiner 下载 | GUI 用于专家和简单模式 | 图像识别;CAPTCHA 解决 | 不适用 | FMiner | 是 | | 16 | SingleFile | 整洁地保存网页 | HTML | 浏览器扩展:从 Chrome 网上应用店或 Firefox 附加组件安装 SingleFile | 点击 SingleFile 图标将页面保存为单个 HTML 文件 | 保持页面原样 | 不适用 | SingleFile | 否 | | 17 | Teleport Pro | Windows 用户需要离线网站副本 | HTML、相关文件 | 从 Teleport Pro 网站下载 | 通过 GUI 输入 URL 并启动项目 | 完整的网站下载 | 不适用 | Teleport Pro | 是 | | 18 | SiteSucker | Mac 用户轻松下载网站 | HTML、PDF、图像、视频 | 从 Mac App Store 下载 SiteSucker | 使用 Mac 应用程序输入 URL 并点击“下载” | 适用于 Mac;简单界面 | 不适用 | SiteSucker | 是 | | 19 | GrabSite | 详细的网站归档 | WARC | bash pip install grab-site
| bash grab-site http://example.com --1 --no-offsite-links
| 交互式归档工具;可定制 | 不适用 | GrabSite | 否 | | 20 | Pandoc | 将网页转换为不同的文档格式 | Markdown、PDF、HTML、DOCX | bash sudo apt-get install pandoc
| ```bash wget -
O example.html http://example.com; pandoc -f html -t markdown -o output.md example.html``` | 广泛转换格式 | 不适用 | Pandoc | 否 |
此表按从最全面、功能强大的工具(适合处理复杂、动态内容)到更具体、更简单的任务(如格式转换或下载整个网站以供离线使用)的顺序排列。每个工具的主要优势和预期用例指导了它们的排名,以帮助用户根据其特定需求选择正确的工具。其中包含 Docker 命令和仓库 URL,以便于安装和设置,确保用户能够以最少的设置障碍开始使用。
11. 使用 Scrapy 进行高级网络抓取 (Python)
Scrapy 是一个快速的高级网络爬虫和网络抓取框架,用于抓取网站并从中提取结构化数据。
脚本:
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
allowed_domains = ['example.com']
start_urls = ['http://example.com/']
def parse(self, response):
page = response.url.split("/")[-2]
filename = f'example-{page}.html'
with open(filename, 'wb') as f:
f.write(response.body)
self.log(f'Saved file {filename}')
说明:
- 定义一个 Scrapy 爬虫来抓取
example.com
。 - 将每个页面保存为本地 HTML 文件。
- 可以根据需要扩展以解析和提取数据。
12. BeautifulSoup 和 Requests (Python 用于简单抓取)
对于简单任务,结合 BeautifulSoup 进行 HTML 解析和 Requests 进行网页抓取非常高效。
脚本:
import requests
from bs4 import BeautifulSoup
url = 'http://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
with open("output.html", "w") as file:
file.write(soup.prettify())
说明:
- 获取网页并使用 BeautifulSoup 解析它们。
- 输出格式良好的 HTML 文件。
13. Teleport Pro (Windows GUI 用于离线浏览)
Teleport Pro 是功能最齐全的下载工具之一,能够读取所有网站元素并从每个角落检索内容。
用法:
- 打开 Teleport Pro。
- 输入项目属性并指定网站 URL。
- 启动项目以下载网站。
说明:
- 适用于偏爱 GUI 而非命令行的用户。
- 检索所有内容以供离线访问。
14. Cyotek WebCopy (将网站复制到您的计算机)
Cyotek WebCopy 是一款用于将完整或部分网站本地复制到磁盘以供离线查看的工具。
用法:
- 安装 Cyotek WebCopy。
- 使用基本 URL 配置项目设置。
- 复制网站。
说明:
- 提供 GUI 来管理网站下载。
- 可定制的设置,用于选择性复制。
15. 下载网站并转换为 SQLite 以供查询(使用 wget 和 sqlite3)
此方法涉及下载 HTML 内容并使用脚本将数据转换为 SQLite 数据库。
脚本:
wget -O example.html http://example.com
echo "CREATE TABLE web_content (content TEXT);" | sqlite3 web.db
echo "INSERT INTO web_content (content) VALUES ('$(<example.html)');" | sqlite3 web.db
说明:
- 下载网页并创建 SQLite 数据库。
- 将 HTML 内容插入数据库以进行复杂查询。
16. ArchiveBox(自托管互联网档案)
ArchiveBox 会获取您访问过的网站URL列表,并从每个网站的内容创建一个本地的、可浏览的HTML和媒体档案。
设置:
docker pull archivebox/archivebox
docker run -v $(pwd):/data -it archivebox/archivebox init
archivebox add 'http://example.com'
archivebox server 0.0.0.0:8000
解释:
- 在 Docker 容器中运行 ArchiveBox。
- 将网站添加到您的个人档案中,可本地提供服务。
17. GrabSite (用于网络爬取的先进交互式档案工具)
GrabSite 是一个用于将网站存档到 WARC 文件中的爬虫,可详细控制要抓取的内容。
命令:
grab-site http://example.com --1 --no-offsite-links
解释:
- 开始爬取
example.com
,捕获每个页面但忽略外部站点的链接。 - 适用于创建详细档案而无需不必要的内容。
18. SiteSucker (Mac 网站下载应用程序)
SiteSucker 是一款 Macintosh 应用程序,可自动从互联网下载网站。
用法:
- 从 Mac App Store 下载并安装 SiteSucker。
- 输入网站 URL 并按下“下载”。
- 调整设置以自定义下载。
解释:
- 易于使用,设置简单。
- 下载网站以供离线查看和存储。
使用 Wget 创建离线镜像并通过 HTTP 提供服务
使用 wget 下载并通过 http-server 本地提供服务,可以使内容在您的网络上可访问。
脚本:
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://example.com
npx http-server ./example.com
解释:
--mirror
和其他标志确保了完整的离线副本。npx http-server ./example.com
通过 HTTP 提供下载的网站,使其可在本地通过浏览器访问。
20. Browsertrix Crawler 用于全面网络归档
Browsertrix Crawler 使用浏览器自动化准确捕获网站,保留复杂的动态和交互内容。
设置:
- 克隆仓库
git clone https://github.com/webrecorder/browsertrix-crawler.git cd browsertrix-crawler
- 使用 Docker 运行
docker build -t browsertrix-crawler . docker run -it --rm -v $(pwd)/crawls:/crawls browsertrix-crawler crawl --url http://example.com --text --depth 1 --scope all
解释:
- Browsertrix Crawler 使用真实的浏览器环境,确保即使是最复杂的网站也能按浏览器中的显示进行捕获。
- Docker 用于简化安装和设置。
- 结果以 WARC 文件形式保存,如果需要,还会生成文本和截图。
另外 10 种非常有用的爬取方法
这些后续方法用户友好,通常带有图形用户界面 (GUI),并利用现有存储库简化设置和操作。它们适用于从技术专家到偏爱简单直观界面的各种用户。
21. Heritrix
Heritrix 是一个开源的归档爬虫项目,用于捕获网络内容以进行长期存储。
设置:
- GitHub 仓库: Heritrix
- Docker URL
docker pull internetarchive/heritrix:latest docker run -p 8443:8443 internetarchive/heritrix:latest
解释:
- Heritrix 旨在尊重
robots.txt
和控制网络内容归档的元数据指令。 - GUI 通过网络界面访问,使其使用直观。
22. HTTrack Website Copier (GUI 版本)
HTTrack 的 GUI 版本对于不习惯命令行工具的用户来说更容易操作。
用法:
- 从以下网址下载: HTTrack 网站
- 简单的向导界面指导网站下载过程。
解释:
- HTTrack 一次镜像一个网站,将所有必要内容拉取到本地磁盘以供离线查看。
- 它解析 HTML、图像和内容文件,并在您的 PC 上复制网站结构。
23. Octoparse - 自动化数据提取
Octoparse 是一款功能强大、易于使用的网络爬取工具,可自动化网络数据提取。
设置:
- 下载 Octoparse: Octoparse 官方
- 使用内置模板或通过 UI 创建自定义爬取任务。
解释:
- Octoparse 处理简单和复杂的数据提取需求,非常适合非程序员。
- 提取的数据可以导出为 CSV、Excel、HTML 或导入到数据库中。
24. ParseHub
ParseHub 是一款可视化数据提取工具,使用机器学习技术将网络数据转换为结构化数据。
设置:
- 下载 ParseHub: ParseHub 下载
- 该软件提供了一个教程,可从模板开始。
解释:
- ParseHub 适用于使用 JavaScript、AJAX、cookies 等的网站抓取。
- 提供友好的 GUI 用于选择元素。
25. Scrapy with Splash
Scrapy 是一个高效的爬取框架,与 Splash 结合使用,可渲染大量使用 JavaScript 的网站。
设置:
- GitHub 仓库: Scrapy-Splash
- Splash 的 Docker 命令
docker pull scrapinghub/splash docker run -p 8050:8050 scrapinghub/splash
解释:
- Scrapy 负责数据提取,而 Splash 则像真实浏览器一样渲染页面。
- 这种组合对于动态内容网站非常有效。
26. WebHarvy
WebHarvy 是一款即点即用的网络爬取软件,可自动识别数据模式。
设置:
- 下载 WebHarvy: WebHarvy 官方 2
直观的界面允许用户可视化选择数据。
解释:
- WebHarvy 可以处理文本、图像、URL 和电子邮件,并支持模式识别以自动化复杂任务。
27. DataMiner
DataMiner 是一款 Chrome 和 Edge 浏览器扩展,可提取网页中显示的数据并将其组织成电子表格。
设置:
- 安装 DataMiner: DataMiner Chrome 扩展
- 使用预制数据抓取配方或创建新的配方。
解释:
- 非常适合从产品页面、房地产列表、社交媒体网站等提取数据。
- 非常用户友好,拥有强大的支持社区。
28. Content Grabber
Content Grabber 是一款企业级网络爬取工具,对于大规模操作非常有效。
设置:
- 下载 Content Grabber: Content Grabber 官方
- 提供强大的自动化选项和脚本编辑。
解释:
- 专为需要定期处理大量数据的企业设计。
- 支持复杂的数据提取策略和代理管理。
29. FMiner
FMiner 是一款可视化的网络爬取工具,具有强大的项目设计画布。
设置:
- 下载 FMiner: FMiner 官方
- 提供“简单”和“专家”模式,以适应不同用户水平。
解释:
- FMiner 提供高级功能,如图像识别和 CAPTCHA 解决。
- 它功能多样,不仅能有效处理数据抓取,还能处理网络爬取任务。
30. Dexi.io(现为 Oxylabs)
Dexi.io 现已成为 Oxylabs 的一部分,提供强大的基于浏览器的工具,用于抓取动态网页。
设置:
- 注册 Dexi.io: Dexi.io 官方
- 使用其真实浏览器提取或无头收集器功能。
解释:
- Dexi.io 擅长从复杂且高度动态的网站抓取数据。
- 它为基于云计算的抓取操作提供了广泛的支持。
这些工具和方法为各种网络抓取和爬取需求提供了全面的解决方案。无论是通过复杂的、基于浏览器的界面还是命令行实用程序,用户都可以根据自己的技术水平和项目要求选择合适的工具。每种方法都经过精心挑选,以确保在不同类型的网络内容中都具有鲁棒性、易用性和有效性。