天眼查通过网络爬虫抓取了全国企业信用信息公示系统的绝大部分公司工商数据。
它不生产信息,只是一个聚合站,每个省的查询接口和对应的 HTML 结构是不同的,如何高效抓取及解析数据;
这个系统并没有一个展示所有公司的列表,需要传递一个参数查询,如何遍历所有注册公司。
对于解决方案,第一个难点有两个需要解决的问题:1) 各省查询的时候提交请求参数不同; 2) 解析的网页结构不同。第一个无他法,只有硬着头皮手写三十多个不同的提交请求的方式,来模拟各省份不同的查询接口。第二个,其实是可以做到通用,因为虽然网页结构不完全相同,但是最后的呈现形式大同小异,所以是有方式做到非常通用的解析代码的。之所以不说百分之百通用,是因为总有例外需要特殊处理,比如重庆的工商数据,返回的就是一个 JSON 串,不需要再去解析 HTML。
第二个问题才是真正棘手的。无法直接遍历工商信息,那么怎样获取尽可能多的工商数据呢?第一,全国企业信用信息公示系统的访问时很慢的,所以在这里做遍历的话,效率会非常低。但是,每个公司会有唯一的组织机构代码,生成规则可以在网上找到,或者可以直接买一本回去慢慢研究(组织机构代码),通过生成所有的组织机构代码,就可以去这个网站——「全国组织机构代码管理中心 — 诚信体系实名制查询」——查询到对应的基本信息,然后再会到刚才的全国企业信用信息公示系统,就可以查询到对应的工商信息了。
另外,我相信天眼查还会做的一件事就是,当用户查询一家公司,在自己数据库没有找到结果的时候,会立即去全国企业信用信息公示系统查询,并将结果保存下来。
做到上面的内容,还需要一种机制定期更新数据库中的大量公司的信息,当然这是后话。当然,这两步中都面临一个问题——验证码。数以千万计的公司,如果使用人肉打码的话,效率和成本上肯定都是无法承受的,所以,相信天眼查内部还会有一位以上图像识别方面的大牛,毕竟上面出现的网站中有些验证码的识别还是非常困难的。