程序员的浪漫之给对象爬数据,没想到过程中竟然被写接口的老哥字段命名给秀到了!

news/2024/10/22 14:37:44/

目录

  • 一、序言
  • 二、分析需求
  • 三、找数据分析字段
  • 四、建个表开爬数据
  • 五、结语

一、序言

最近对象转了销售岗,她的领导布置了项任务,一周要找500个对标客户的联系电话。看她又上天眼查、企查查、爱企查,还上各种采购平台手动抄采购负责人的信息和中标信息。作为一名平时喜欢爬来爬去的技术人,心里突然冒出一个想法,哥直接写个程序帮你一下把数据给爬下来。

男人的话,就如弦上的箭,正所谓开弓没有回头箭,既然牛逼都吹出来了,熬夜咱也得把数据给倒腾出来。

都说从入门到精通,从爬虫到爬坟,别人都用Python爬,今天咱用Java爬。


二、分析需求

平时在公司同事是产品经理,今天对象成为我的临时产品经理,既然要做产品,咱得先了解需求。

在对象的一波描述和想法输出后,作为身经百战的程序dog瞬间秒懂她要什么数据。首先是咱得知道有哪些招标项目,以及项目的发布时间,如下图:
在这里插入图片描述

除了这些招标项目信息,咱还必须得了解,这个项目的采购价和联系人信息,点击详情既可以看到,如下:
在这里插入图片描述

当然,还有中标后的交易信息,用于分析有哪些竞争对手,如下:
在这里插入图片描述
知道信息在哪后,基本思路出来了:

  1. 分页爬取所有招标公告列表,并批量落库。
  2. 根据招标公告分页列表里的数据,查询详情信息。
  3. 捞出公告详情里采购部门的联系人信息、中标交易信息并落库。

三、找数据分析字段

好家伙,点开页面源码一看,熟悉前端的同学们都知道,这玩意一看就是Vue写的单页面应用。如果是服务端渲染的页面,还得找节点信息,解析html。既然是Vue应用那就好办了,前后端完全分离,直接找数据接口即可。

在这里插入图片描述

接口还是挺容易找的,重点是得找哪个字段对应哪些信息。说实话,这个字段命名是真的离谱,比如ggLeiXing,就是公告类型,还有tbrName,就是投标人名称。

刚开始我还以为是什么特别的单词。仔细一看,这字段命名不就是拼音首字母命名吗?

我估摸着写这些接口的程序dog要么英文是真的不行,要么是偷懒了,不过我估计这个网站也是外包给别人的,当然程序猿和网页一个能跑就完事。

在这里插入图片描述

我们再看看查详情信息的接口,看到这玩意是个GET请求,而且还带了些参数,这个参数一看咱就知道是从上面的那个公告分页列表里捞出来的。接下来就是各种对字段,分析字段格式,还有哪些字段可能为空。
在这里插入图片描述

当然在这里采了一个很大的坑,这个详情接口的ggLeiXing字段值和分页列表返回的字段值对不上,也是研究了半天才发现,这家伙用的是分页列表里的ggXingZhi这个字段。

真是程序猿坑程序猿啊,不专业的程序猿更是离谱到家,这里吐槽一下写接口的哥们,为了这个字段我是多熬夜了20分钟。


四、建个表开爬数据

这里设计两张表,一张是分页数据表,用于保存项目信息和请求详情接口的那些个参数,另外一张就是详情表。

create table `t_purchase_overview`
(`id`           bigint primary key auto_increment comment '主键',`project_no`   varchar(32)  not null default '' comment '项目编号',`project_name` varchar(64)  not null default '' comment '项目名称',`publish_time` datetime     null comment '发布时间',`gg_guid`      varchar(128) not null default '' comment '公告GUID',`gg_type`      tinyint      null     default 0 comment '公告类型',`bd_guid`      varchar(128) not null default '' comment '标的GUID',`guid`         varchar(128) not null default '' comment 'GUID',`data_source`  tinyint null default 0 comment '数据源: 0-"app/home/detail", 1-"app/etl/detail"',`create_time`  datetime     not null default current_timestamp comment '创建时间',`update_time`  datetime     null comment '更新时间'
) comment '采购数据概览(分页信息)';
create index `idx_tpo_project_no` on t_purchase_overview (project_no);create table `t_purchase_bulletin`
(`id`               bigint primary key auto_increment comment '主键',`project_no`       varchar(32)    not null default '' comment '项目编号',`project_name`     varchar(64)    not null default '' comment '项目名称',`publish_time`     datetime       null comment '公告发布时间',`price`            decimal(15, 2) not null default 0 comment '招标价格',`purchase_company` varchar(32)    null comment '采购单位',`company_address`  varchar(128)   null comment '采购单位地址',`contact_name`     varchar(8)     null comment '联系人',`contact_phone`    varchar(36)    null comment '联系电话',`trans_info`       varchar(1024)  null comment '成交信息(JSON)格式',`create_time`      datetime       not null default current_timestamp comment '创建时间',`update_time`      datetime       null comment '更新时间'
) comment '采购公告信息(详情)';
create index `idx_tpb_create_time` on t_purchase_bulletin (create_time);
create index `idx_tpb_publish_time` on t_purchase_bulletin (publish_time);

有了表,找对了字段,代码逻辑其实真的非常简单,这次特性把JDK升级到了17,体验了下新特性。

先爬取列表数据,这里循环拉取下批量数据,批量保存,几秒就搞定,如下:
在这里插入图片描述
再爬一下详情数据,这里有待优化,毕竟有1000多条数据,又要网络请求,又要入库,多线程跑批会更快。如下:
在这里插入图片描述


五、结语

爬完之后,写了条SQL导成Excel交给了对象,当时说几个小时能搞定的活,愣是搞了一大晚上,看来还是不能夸下海口啊。男人吹牛逼也得先估一下工期,不然立下军令状容易跪榴莲。

对象leader说的每周去平台找500个电话,这次通过技术手段一次性搞了1700多个,缓解了3周找电话的压力。重点是爬虫写好后,后面可以一键拉取最新数据,也许这就是技术的价值吧。

当然,爬虫虽好,但咱不能去爬取一些隐私数据,不然容易面向监狱编程,刑得通。

在这里插入图片描述


http://www.ppmy.cn/news/1541076.html

相关文章

基于SSM机场网上订票系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,机票信息管理,订单信息管理,机场广告管理,系统管理 前台账号功能包括:系统首页,个人中心,机票信息&#xf…

js 鼠标拖动canvas画布

功能点&#xff1a; 鼠标拖拽canvas画布移动鼠标检测rect鼠标检测circle 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-sc…

Rust编程语言变量的所有权(ownership)

文章目录 什么是所有权所有权规则转让所有权变量与数据交互的方式(一):移动变量与数据交互的方式(二):克隆只在栈上的数据:拷贝所有权与函数返回值与作用域引用和借用可变引用悬垂引用(Dangling References)引用的规则什么是所有权 所有权(ownership)是Rust 的核心功能之一…

ARAIM在航空领域的重要性及其面临的主要挑战

笔者这篇博客主要目的是总结目前ARAIM技术面临的主要问题&#xff0c;为做高级接收机自主完好性的小伙伴提供论文创新点思路。对于研究方向迷茫的小伙伴可以参考ARAIM目前存在的主要问题&#xff0c;展开相关研究&#xff0c;希望该博客对读者有所帮助。 1.全球卫星导航系统发…

Axure使用教程,产品经理如何用Axure制作一份高质量高保真的OA办公管理系统原型?附源文件下载

OA办公管理系统&#xff08;Office Automation Management System&#xff09;是通过现代计算机和通信技术&#xff0c;将办公过程中的信息、数据和流程进行自动化处理&#xff0c;以提高工作效率、降低成本的一套系统。构建OA办公管理系统涉及多个步骤&#xff0c;以下是一个概…

手写模拟Spring的基本功能

文章目录 1. Spring的基本功能2. 容器启动 容器启动&#xff0c;即创建容器对象并赋予配置对象3. BeanDefinition扫描4. Bean的生命周期5. 单例Bean与多例Bean6. 依赖注入7. AOP8. Aware 回调9. 初始化10. BeanPostProcessor附录&#xff1a; 1. Spring的基本功能 2. 容器启动 …

Ajax:跨域、防抖和节流、HTTP协议

在善意的“双向奔赴”中&#xff0c;每个普通人都如星辰&#xff0c;微小但释放着自己的光芒&#xff0c;交织成灿烂的星河 文章目录 跨域防抖和节流HTTP协议HTP状态码以及代表意义错误代码的影响移动的小天使 跨域 同源策略 概念&#xff1a;协议&#xff0c;域名&#xff0c…

大数据-178 Elasticsearch Query - Java API 索引操作 文档操作

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…