对于刚入职的半年的“新人”,多听听领导的建议还是大有裨益的。我们主任就说,新人要首先熟悉一下单位的业务,以及单位有哪些数据。在工作中,我就尽可能的了解一下这些,直到,我发现了POI数据。单位采集POI数据主要有两种方式,一是外业采集,这种方式的问题是人力投入较大,工期较长,也因为这个原因,数据更新速度也会较慢。二是直接找互联网公司买,这种方式简单粗暴,有钱就好使,至于问题。。。就是花的钱多。于是,我想了想,能不能使用网络爬虫去爬POI数据,成本低,效果不一定差。虽然单位不差钱,也不一定能采用我的方式,不过学习一下也有好处。
首先是开发环境的搭建,我用的是python,编译器为VSCode(至于原因,一是随意选的,二是。。觉得好看)。我之前没有python的开发经历,选python就是为了顺便学习一下,毕竟ARCGIS现在对python的支持越来越好。
然后进入爬虫阶段。我是小白,用的是urllib以及beautifulsoup。查看目标网页,发觉要爬POI数据,需要走如下几个步骤。
1 在每一个列表页,爬取每一条POI数据对应的html页面
2 进入每一条POI数据对应的html页面爬取需要的信息,如地址、名称、坐标等。
3 将结果写入mysql数据库
思路确定了,开始写代码,第一个demo测试很成功,50条POI数据很快就写入了数据库。但是,往下走,问题就出来了,第一,速度好慢,n秒一条的速度,20几万的数据,要爬多久简单一算就知道了,不能忍。于是开启了多线程,开了多线程,也得使用数据库连接池,我用的是dbutils.pooledDB。这就加了两个技术点,虽然简单。第二个问题,反爬虫,这是一个困扰我很久的问题,网上说,加agent,使用代理IP,爬前睡一会儿,我都用了,但是效果并不好,尤其代理IP。第三个问题,其实不算问题,但是也让我忙活很久,网络问题。 加了try catch,在单位网好的时候爬,算是解决一点。
之后,进行了第二轮测试,500条,1000条,1500条,2500条,5000条。前三个基本能成功,速度也可以,平均能到一分钟