Feapder 政府网站爬虫规范(中铁四局)
Overview
本技能定义了 中铁四局 政府网站爬虫必须遵循的 feapder 框架约定:使用 feapder.AirSpider + public_function.spider_tools.send_item(item) 产出标准 item,由框架统一落库,本地不写 SQLite。适用于发改委 / 生态环境 / 自然资源 / 水务 / 水利部 / 区政府等所有政府网站爬虫的新建、改造与维护。
硬性规则(必须遵守)
- 框架:继承
feapder.AirSpider;入口start_requests用yield feapder.Request(...),回调链parse_list→parse_content。 - 落库:只调用
send_item(item)。禁止sqlite3/init_db/UPSERT_SQL/conn.execute/ 任何本地写库代码。 - 导入路径:
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))(三级 dirname,用于导入public_function)。结尾必须是 5 个右括号;多写 1 个会变成 6 个,直接报SyntaxError: unmatched ')'。 - 字段类型:所有文本字段一律
str,不允许None(缺失 →'');整数标志位保持int。 - 强制留空字段:
project_categories(项目类别)与examine_content(事项名称)必须留空'',不解析。 - 标准 item 字典(约 47 字段,完整见
references/template_spider.py的make_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。
- 仅解析必要字段;其余留
- item 传递:列表回调构造 item 后,用
meta={'item': copy.deepcopy(item)}传给详情回调;详情回调里item = request.meta['item'],回填content/files/ 属地后再send_item(item)。
标准工作流
- 探查站点:确认列表来源(静态 HTML / JSONP / POST 搜索 API / 浏览器渲染 WAF 页),记录分页方式与详情正文容器(常见
#ivs_content、.article-content、文章体)。 - 保留抽取逻辑:原爬虫的站点专属 xpath / regex 抽取逻辑直接复用,只替换「落库层」为
send_item。 - 套用骨架:复制
references/template_spider.py,按站点填写WEB_NAME / BASE / BOARDS / 列表URL / 解析逻辑 / 属地。 - 文件头注释:每个爬虫顶部写明「采集网站名称、链接、框架、站点结构、字段约定」。
- 语法校验:
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.18、2026-08-18等统一洗成YYYY-MM-DD,失败回退''(参考模板_norm_date)。
资源
references/template_spider.py:可直接复制的 AirSpider 标准骨架(含 47 字段make_item、start_requests→parse_list→parse_content、日期/附件/链接工具函数)。references/item_schema.md:标准 item 字典逐字段说明(固定值 / 解析字段 / 强制留空字段)。
校验命令
# 将 <spider>.py 替换为实际文件后执行,要求无输出即通过
python -m py_compile <spider>.py
Scan to join WeChat group