审计 robots.txt 策略、解释访问决策、校验站点地图并规划合规抓取任务
moon add 2111950632/robots-gatelet policy = @robots_gate.parse(
#|User-agent: *
#|Disallow: /private/
#|Allow: /private/public/
#|Crawl-delay: 2
)
let decision = @robots_gate.decide(
policy,
"ExampleBot/1.0",
"/private/public/index.html",
)
println(decision.summary())
println(@robots_gate.render_decision_trace(decision))let audit = @robots_gate.audit(
robots_text,
["Googlebot", "Bingbot", "GPTBot"],
["/", "/admin/", "/api/", "/private/", "/public/"],
)
println(@robots_gate.render_audit_markdown(audit))let sitemap = @robots_gate.parse_sitemap(sitemap_text)
let tasks = @robots_gate.tasks_from_sitemap(sitemap, 32768)
let budget = @robots_gate.crawl_budget(100, 10000000, 8, 25, 1000)
let plan = @robots_gate.plan_crawl(policy, "ExampleBot", tasks, budget)
println(@robots_gate.render_crawl_plan(plan))moon run cmd/main -- decide ExampleBot /private/report
moon run cmd/main -- lint
moon run cmd/main -- normalize
moon run cmd/main -- matrix
moon run cmd/main -- sitemap
moon run cmd/main -- plan
moon run cmd/main -- diff
moon run cmd/main -- audit
moon run cmd/main -- audit json
moon run cmd/main -- stats$env:MOONROBOTS_POLICY = @"
User-agent: *
Disallow: /internal/
Allow: /internal/public/
Sitemap: https://example.com/sitemap.xml
"@
moon run cmd/main -- auditmoon run examples/basic
moon run examples/advanced
moon run examples/sitemap
moon run examples/planner| 模块 | 职责 |
|---|---|
| model.mbt | 公共协议类型、诊断类型、决策类型和统计类型 |
| parser.mbt | 防御式逐行解析和源位置诊断 |
| matcher.mbt | 用户代理选择、通配符匹配和决策轨迹 |
| url.mbt | HTTP URL 解析及来源、路径辅助函数 |
| lint.mbt | 语义和可维护性诊断 |
| render.mbt | 策略、诊断、轨迹和摘要输出 |
| matrix.mbt | 批量探针和行为比较 |
| diff.mbt | 结构变化和探针驱动的行为变化 |
| sitemap.mbt | 站点地图解析、校验和策略过滤 |
| frontier.mbt | 带预算约束的确定性抓取规划 |
| audit.mbt | 聚合评分以及 Markdown、JSON 报告 |
moon info
moon fmt
moon check
moon build
moon test
moon package --listpub struct CrawlPlan {
accepted : Array[PlannedTask]
rejected : Array[RejectedTask]
total_estimated_bytes : Int
estimated_duration_millis : Int
} derive(Eq, Debug)pub struct Decision {
allowed : Bool
agent : String
path : String
normalized_path : String
rule_kind : RuleKind
rule_pattern : String
line : Int
reason : String
agent_specificity : Int
rule_specificity : Int
matched_groups : Int
trace : Array[DecisionStep]
} derive(Eq, Debug)pub struct DecisionMatrix {
outcomes : Array[ProbeOutcome]
allowed_count : Int
denied_count : Int
default_count : Int
} derive(Eq, Debug)pub struct Diagnostic {
severity : Severity
code : String
message : String
span : SourceSpan
hint : String
} derive(Eq, Debug)pub struct Directive {
kind : DirectiveKind
key : String
value : String
raw : String
span : SourceSpan
} derive(Eq, Debug)pub struct MatrixComparison {
name : String
before : ProbeOutcome?
after : ProbeOutcome
change : BehaviorChange
} derive(Eq, Debug)pub struct PolicyAudit {
policy : Policy
diagnostics : Array[Diagnostic]
matrix : DecisionMatrix
risk_score : Int
grade : String
explicit_decisions : Int
default_decisions : Int
} derive(Eq, Debug)pub struct PolicyChange {
kind : ChangeKind
subject : String
before : String
after : String
line_before : Int
line_after : Int
} derive(Eq, Debug)pub struct PolicyDiff {
changes : Array[PolicyChange]
structural_count : Int
behavioral_count : Int
} derive(Eq, Debug)pub struct RejectedTask {
task : CrawlTask
reason : RejectionReason
detail : String
} derive(Eq, Debug)pub struct SitemapDocument {
kind : SitemapKind
entries : Array[SitemapEntry]
child_sitemaps : Array[String]
diagnostics : Array[Diagnostic]
source_items : Int
} derive(Eq, Debug)fn allowed_sitemap_entries(policy : Policy, agent : String, document : SitemapDocument) -> Array[SitemapEntry]fn blocked_sitemap_entries(policy : Policy, agent : String, document : SitemapDocument) -> Array[SitemapEntry]fn crawl_budget(max_requests : Int, max_bytes : Int, max_depth : Int, max_requests_per_host : Int, fallback_delay_millis : Int) -> CrawlBudgetfn crawl_task(id : String, url : String, priority : Int, depth : Int, estimated_bytes : Int) -> CrawlTaskfn cross_origin_entries(document : SitemapDocument, expected_origin : String) -> Array[SitemapEntry]fn discovered_crawl_task(id : String, url : String, priority : Int, depth : Int, estimated_bytes : Int, discovered_from : String) -> CrawlTaskfn normalize_path(path : String) -> Stringfn normalize_percent_encoding(input : String) -> Stringfn parse_options(max_input_chars : Int, max_lines : Int, max_line_chars : Int, max_groups : Int, max_rules : Int, preserve_unknown : Bool) -> ParseOptionsfn plan_crawl(policy : Policy, agent : String, tasks : Array[CrawlTask], budget : CrawlBudget) -> CrawlPlanfn render_blocked_sitemap_report(policy : Policy, agent : String, document : SitemapDocument) -> String审计 robots.txt 策略、解释访问决策、校验站点地图并规划合规抓取任务