Back to skills
extension
Category: Data & AnalyticsNo API key required

拟建采集专家

Use this skill when writing, rewriting, or maintaining government-website (政府网站) crawlers for 中铁四局 that must follow the feapder AirSpider framework provided by the team's professional crawler developer. Triggers include: "按 feapder 框架写爬虫", "把旧爬虫改成 send_item 框架", "改成 AirSpider", "政府网站爬虫", or any task to produce a spider that must NOT write to local SQLite but instead emit a standard item via public_function.spider_tools.send_item. Also applies when converting existing SQLite-writing spiders (e.g. mwr_gov.db) into the framework.

personAuthor: user_f740ddcchubcommunity

Feapder 政府网站爬虫规范(中铁四局)

Overview

本技能定义了 中铁四局 政府网站爬虫必须遵循的 feapder 框架约定:使用 feapder.AirSpider + public_function.spider_tools.send_item(item) 产出标准 item,由框架统一落库,本地不写 SQLite。适用于发改委 / 生态环境 / 自然资源 / 水务 / 水利部 / 区政府等所有政府网站爬虫的新建、改造与维护。

硬性规则(必须遵守)

  1. 框架:继承 feapder.AirSpider;入口 start_requestsyield feapder.Request(...),回调链 parse_listparse_content
  2. 落库:只调用 send_item(item)禁止 sqlite3 / init_db / UPSERT_SQL / conn.execute / 任何本地写库代码。
  3. 导入路径sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))(三级 dirname,用于导入 public_function)。结尾必须是 5 个右括号;多写 1 个会变成 6 个,直接报 SyntaxError: unmatched ')'
  4. 字段类型:所有文本字段一律 str不允许 None(缺失 → '');整数标志位保持 int
  5. 强制留空字段project_categories(项目类别)与 examine_content(事项名称)必须留空 '',不解析。
  6. 标准 item 字典(约 47 字段,完整见 references/template_spider.pymake_item):
    • 仅解析必要字段;其余留 ''
    • 固定整数标志:is_project=1, is_recommend=0, is_detail=1, is_parse_file=0, is_parse=1, is_person=0
    • 固定文本:web=站点名;url=详情页链接;content=详情正文(HTML 串);files=附件(json.dumps([{name,url}])'');issue_time=日期(归一化为 YYYY-MM-DD'')。
    • 部分站点额外固定 province / city / district
  7. item 传递:列表回调构造 item 后,用 meta={'item': copy.deepcopy(item)} 传给详情回调;详情回调里 item = request.meta['item'],回填 content / files / 属地后再 send_item(item)

标准工作流

  1. 探查站点:确认列表来源(静态 HTML / JSONP / POST 搜索 API / 浏览器渲染 WAF 页),记录分页方式与详情正文容器(常见 #ivs_content.article-content、文章体)。
  2. 保留抽取逻辑:原爬虫的站点专属 xpath / regex 抽取逻辑直接复用,只替换「落库层」为 send_item
  3. 套用骨架:复制 references/template_spider.py,按站点填写 WEB_NAME / BASE / BOARDS / 列表URL / 解析逻辑 / 属地
  4. 文件头注释:每个爬虫顶部写明「采集网站名称、链接、框架、站点结构、字段约定」。
  5. 语法校验python -m py_compile <file>.py 必须 0 报错(导入 feapder / public_function 不会在编译期执行,本地可过)。

常见陷阱

  • sys.path 括号数错:三级 dirname 结尾 5 个 ),错写成 6 个会直接 SyntaxError。手写易错,建议从已验证文件复制或脚本批量生成。
  • 文本字段出现 None:未解析到的字段务必 or "" 兜底。
  • 附件 files:多个附件用 json.dumps([{"name":..., "url":...}], ensure_ascii=False);无附件则 ''
  • 日期归一化:epoch(ms)、2026.08.182026-08-18 等统一洗成 YYYY-MM-DD,失败回退 ''(参考模板 _norm_date)。

资源

  • references/template_spider.py:可直接复制的 AirSpider 标准骨架(含 47 字段 make_itemstart_requests→parse_list→parse_content、日期/附件/链接工具函数)。
  • references/item_schema.md:标准 item 字典逐字段说明(固定值 / 解析字段 / 强制留空字段)。

校验命令

# 将 <spider>.py 替换为实际文件后执行,要求无输出即通过
python -m py_compile <spider>.py