提取网页为MarkDown完整流程
提取网页为MarkDown完整流程
提取网页为MarkDown完整流程
Percollate Markdown Extraction Workflow
以下是在新机器上从零开始配置并使用 Percollate 批量提取网页为 Markdown 的完整流程,包含环境准备、安装配置、以及循环自动化脚本示例。
一、环境准备
安装 Node.js
到 https://nodejs.org 下载并安装 LTS 版本(如 v20.x)。
验证安装:
1 2
node -v npm -v
配置 Puppeteer 使用本地 Edge Percollate 内部依赖 Puppeteer,为避免下载内置 Chromium 耗时或失败,将其指向已安装的 Edge。
1 2 3 4 5 6 7 8 9 10 11
# 查找 Edge 可执行路径 $Edge = @( "$env:ProgramFiles\Microsoft\Edge\Application\msedge.exe", "${env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe", "$env:LOCALAPPDATA\Microsoft\Edge\Application\msedge.exe" ) | Where-Object { Test-Path $_ } $Edge # 设置环境变量,跳过 Chromium 下载 setx PUPPETEER_SKIP_DOWNLOAD "1" setx PUPPETEER_EXECUTABLE_PATH "$Edge"
安装 Percollate
1 2 3
npm cache clean --force npm install -g percollate percollate --version
确认 curl.exe 可用
- Windows 10/11 自带
curl.exe,如报错可通过 Microsoft Store 安装“Windows 命令行工具包”。
- Windows 10/11 自带
允许 PowerShell 运行脚本
1
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force
二、脚本部署
在任意目录(如 C:\Tools\BlogExport)新建 CatchHtmlToMD.ps1,使用 UTF-8 编码,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 循环提取 Markdown(含代理 + 自动命名)
$ErrorActionPreference = 'Stop'
# 一次性启用代理(按需修改)
$env:HTTP_PROXY = "http://127.0.0.1:10809"
$env:HTTPS_PROXY = "http://127.0.0.1:10809"
# 输出目录(硬编码,可修改)
$OutDir = "F:\BlogExport"
if (-not (Test-Path $OutDir)) {
New-Item -ItemType Directory -Path $OutDir | Out-Null
}
function Sanitize([string]$n) {
$n = $n.Trim()
$inv = [IO.Path]::GetInvalidFileNameChars()
foreach ($c in $inv) { $n = $n.Replace($c, '_') }
$n = [regex]::Replace($n, '\s+', ' ')
if ($n.Length -gt 100) { $n = $n.Substring(0,100).Trim() }
return if ($n) { $n } else { 'page' }
}
while ($true) {
$url = Read-Host "`n请输入要提取的网页 URL(留空回车退出)"
if ([string]::IsNullOrWhiteSpace($url)) { break }
try {
# 1) 获取页面并解析标题
Write-Host "[1] 解析标题..."
$resp = Invoke-WebRequest -Uri $url -UseBasicParsing -Headers @{ 'User-Agent'='Mozilla/5.0' }
$html = $resp.Content
$m = [regex]::Match($html, '<title[^>]*>(.*?)</title>', 'IgnoreCase')
$title = if ($m.Success) { $m.Groups[1].Value } else { ($url -split '/')[-1] }
$base = Sanitize $title
# 2) 提取 Markdown
$mdPath = Join-Path $OutDir ("$base.md")
Write-Host "[2] 提取 Markdown 至: $mdPath"
& percollate md $url -o $mdPath
if ($LASTEXITCODE -ne 0 -or -not (Test-Path $mdPath) -or (Get-Item $mdPath).Length -eq 0) {
Write-Warning "提取失败或输出为空,请检查 URL/代理。"
} else {
Write-Host "✅ 完成: $mdPath"
}
} catch {
Write-Warning "出错:$($_.Exception.Message)"
}
}
Write-Host "`n已退出。关闭窗口或 Ctrl+C 终止。"
三、脚本运行
打开 PowerShell,切换到脚本目录:
1
cd C:\Tools\BlogExport
执行脚本:
1
.\CatchHtmlToMD.ps1
按提示输入要提取的网页 URL → 输出目录下生成
标题.md。输入留空回车或关闭窗口退出。
本文由作者按照 CC BY 4.0 进行授权