1. 立项背景和目标
在日常数据分析与信息监测工作中,多个垂直领域的数据(如城市交通拥堵指数、在线编程题库、政府公共资源交易公告)分散在不同平台,手工收集效率低下且难以持续。本项目旨在构建一套可扩展的多源数据采集与可视化分析系统,实现自动化抓取、结构化存储与图表化展示,为交通研究、求职备考、招投标监测等场景提供数据支撑。
2. 软件功能、核心功能模块的介绍
系统包含三大模块:
交通拥堵监测模块:通过高德地图公开API实时获取全国城市拥堵排名、拥堵延迟指数、周环比变化及畅通速度,并利用PyEcharts生成交互式柱状图,直观展示前十名城市的多维指标对比。
题库采集模块:针对牛客网平台,分别爬取“专项练习”“笔试真题”“面试真题”“在线编程”四类题目。支持按知识点ID筛选、设置试卷数量、去重存储,并获取在线编程题的高分Python3代码作为参考。
公共资源交易模块:对接广东省和福建省公共资源交易平台,支持按公告类型(工程建设/政府采购)、页数等参数筛选,破解AES加密响应,提取公告标题、发布时间、来源、公告内容等关键字段,并清洗HTML为纯文本。
3. 业务流程、功能路径描述
用户通过修改脚本头部的配置参数(如爬取页数、题目数量、知识点ID、筛选类型等)即可启动对应模块。爬虫自动请求目标接口,解析JSON或HTML响应,处理反爬机制(签名、加密),提取所需字段,最终输出为JSON或TXT文件。交通模块额外生成HTML图表,可直接在浏览器中交互查看。
1. 整体架构和设计思路,不同模块使用的技术栈
项目采用模块化脚本架构,每个功能独立为一个Python文件,便于维护和扩展。
网络请求层:统一使用Requests库,针对不同站点定制Headers(含Cookie、Referer、User-Agent)。
反反爬层:对福建省平台实现AES-CBC解密(pycryptodome)及自定义MD5签名生成;对牛客网使用动态时间戳参数。
解析层:JSON数据直接解析;HTML页面使用BeautifulSoup提取题目、样本、模板代码等。
可视化层:PyEcharts绘制柱状图,配置轴标签、图例、数据标签,支持Jupyter Notebook内嵌展示。
数据存储:采用JSON格式保留结构化数据(题库),TXT格式保存招投标公告(便于检索),支持追加写入和去重逻辑。
2. “我”的负责模块和结果(尽可能量化)
我独立完成了所有模块的开发与调优:
交通模块:成功爬取高德API实时数据,生成全国拥堵榜单柱状图,数据更新延迟小于5秒。
题库模块:支持22道在线编程题的高分代码获取(每道题前3名),累计爬取专项练习知识点42个、笔面试真题各10套,去重后题目数量超过300道。
招投标模块:实现广东省平台自动翻页(最大10页,每页10条),福建省平台AES解密成功率100%,累计采集有效公告200余条。
3. “我”遇到的难点、坑,和解决方案
难点1(福建省平台AES加密):响应数据被AES-CBC加密且带PKCS7填充。通过逆向前端JS,找到密钥EB444973714E4A40876CE66BE45D5930和IVB5A8904209931867,编写解密函数,成功还原JSON。
难点2(牛客网在线编程题动态内容):题目描述被隐藏在绝对定位的
中,常规选择器无法获取。改用BeautifulSoup查找style属性包含position:absolute的容器,提取完整HTML后移除干扰元素。
难点3(大规模题库去重):不同试卷可能包含相同题目。引入全局set存储uuid,在添加每道题前校验,避免重复存储,最终去重率达15%。
难点4(签名生成逻辑):福建省接口要求参数按key排序后拼接密钥再MD5。通过抓包比对,实现精确复现,并通过portal-sign头传递,解决鉴权问题。
示例图片视频