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

如何用Wget的--accept-regex参数镜像GitHub PR页面

问题分析与解决方法

核心问题原因

  1. 正则锚定过严:你的正则使用$锚定URL结尾,但GitHub页面中的链接可能包含额外参数(如排序参数)或参数顺序与预设不同,导致匹配失败。
  2. 参数顺序不固定:GitHub的分页链接参数顺序可能变化(如q=...&page=2而非page=2&q=...),原正则仅匹配固定顺序的参数,导致漏抓。
  3. 正则引擎差异:Wget使用POSIX扩展正则(ERE),与regex101默认的PCRE语法存在差异,部分转义规则处理不同。

修正后的脚本

调整正则规则,放宽锚定限制,兼容参数顺序变化,并适配Wget的ERE语法:

#!/usr/bin/env python3
import subprocess

accept_regex = "|".join([
    # 匹配开放PR列表页(含第一页及所有分页)
    r'\/pulls(?:\?page=\d+)?$',
    # 匹配关闭PR列表页(含第一页及任意分页,兼容参数顺序)
    r'\/pulls\?(?:q=is%3Apr\+is%3Aclosed(?:&page=\d+)?|page=\d+&q=is%3Apr\+is%3Aclosed)$',
    # 匹配单个PR页面(允许URL末尾带额外参数)
    r'\/pull\/\d+',
])

subprocess.run(
    [
        "wget",
        "--verbose",
        "--mirror",
        f"--accept-regex={accept_regex}",
        "--wait=1",
        "--random-wait",
        "--tries=inf",
        "--waitretry=3600",
        "--retry-connrefused",
        "--retry-on-host-error",
        "--retry-on-http-error=429",
        "--convert-links",
        "--adjust-extension",
        # 若不需要页面依赖资源(如CSS/JS),可移除--page-requisites
        "--page-requisites",
        "--xattr",
        "--directory-prefix=site",
        "--append-output=wget_logfile",
        "--backups=99",
        "https://github.com/seanh/oatcake",
    ]
)

额外优化建议

  1. 测试正则匹配:用Wget的--spider模式验证单条URL是否被匹配,避免依赖regex101的PCRE结果:
    wget --accept-regex="YOUR_REGEX" --spider --verbose "https://github.com/seanh/oatcake/pulls?page=2&q=is%3Apr+is%3Aclosed"
    
  2. 减少无关请求:若不需要页面样式、脚本等资源,删除--page-requisites参数,避免抓取无关内容。
  3. 限制域名范围:添加--domains=github.com,防止Wget抓取页面中指向其他域名的链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:52:43