钢铁现货价格每天都在变,采购和销售人员要在欧冶云商等平台反复翻页比价、手工记录货源,效率低且容易漏单。本项目把全国主要仓库(上海、武汉、湛江、南京等)的现货资源汇总成一张结构化表,用于价格监控、比价选源和采购决策。业务属于大宗商品/钢铁供应链的公开行情采集:数据公开、无需登录,但对反爬对抗、字段完整性和长期可维护性要求高,因此需要一套工程化系统而不是一次性脚本。
点击空白处退出提示
钢铁现货价格每天都在变,采购和销售人员要在欧冶云商等平台反复翻页比价、手工记录货源,效率低且容易漏单。本项目把全国主要仓库(上海、武汉、湛江、南京等)的现货资源汇总成一张结构化表,用于价格监控、比价选源和采购决策。业务属于大宗商品/钢铁供应链的公开行情采集:数据公开、无需登录,但对反爬对抗、字段完整性和长期可维护性要求高,因此需要一套工程化系统而不是一次性脚本。
1)挑战页处理:自动请求落地页,识别 202 挑战响应,提取内联 $_ts 种子与随机路径的外链混淆脚本;
2)令牌铸造:调用本地 nv8 运行时原样执行站点挑战 JS,钩住 cookie 写入,取服务端认可的首次写入值;
3)过闸与采集:注入令牌后先请求落地页验证 200,再调用业务接口,按 10 页 × 50 条逐页采集;
4)解析清洗:兼容「单体资源 / 打包资源」两种响应结构,输出标题、价格、地址,以及品名、牌号、规格、计重、钢厂、卖家等共 24 列;
5)完整性保障:按资源ID/批次号多维去重,因翻页漂移导致条数不足时自动补页,摘要如实记录请求页数与重复行数;
6)交付与运维:命令行参数、统一日志、失败重试与重铸上限,产出 CSV / JSONL / 运行摘要 / 原始快照,附 18 项离线单测和一键运行脚本;采集只读公开列表,单线程、0.5 秒间隔。
我独立完成需求拆解、协议分析、编码和验收。①协议分析:抓包定位 queryCommodityResult 接口,用对照实验确认站点为瑞数 RS6(202 状态、$_ts 种子、随机外链 VM 脚本),并验证服务端只认首次写出的 provisional 令牌(235 字符),终态 363 字符无效。②令牌铸造:编写 Node 侧窄工件,用 nv8 重建 Edge 运行时原样执行挑战脚本,沿原型链找到 document.cookie 访问器做 setter 钩子,只回传令牌,业务请求与数据全部留在 Python。③工程实现:Python 3.11 + curl_cffi 对齐 TLS 指纹,按 challenge / mint / client / api / collector / storage 分层,解析写成纯函数并配 18 项离线单测。④难点:令牌用一次即失效需每页重铸(约 3 秒)、打包资源字段平铺在顶层需两套解析、分页漂移造成重复,用多维去重加自动补页解决。⑤验收:目标 500 条,实采 500 条(11 页,重复 33 行已去重),标题/价格/地址空值 0,单页 3~4 秒。



评论