基于python的POI数据爬取、处理和使用(一)

   对于刚入职的半年的“新人”,多听听领导的建议还是大有裨益的。我们主任就说,新人要首先熟悉一下单位的业务,以及单位有哪些数据。在工作中,我就尽可能的了解一下这些,直到,我发现了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条。前三个基本能成功,速度也可以,平均能到一分钟100条,第四个,偶尔成功,问题在于网络。第五个,没成功过,可能也是网络原因。不成功没事,但还有一个棘手的问题,失败后,无法从失败的点继续爬下去,因为用的是多线程,无法判断爬到了哪里,而且第一步,爬取的每一条POI数据对应的html页面无法保存继续使用。所以,要改变策略。

 我的方式就是把代码分离(有点笨),把第一步的工作分离出一个独立程序,运行后将结果写入txt文本中。第二步和第三步写成一个程序,读取第一步留下的txt文本。另一个方式是,我每次只爬1000条数据,一次就十分钟,没有出现问题。于是,在某个上午,我一带带拉拉的两小时爬了6000条数据(用的本地IP),结果,ip被封了。那就用代理IP吧,另写一个爬虫,爬取代理IP,然后写一个函数,检验可用性,将可用的IP写入txt文档,然后调用,这里有个问题现在还没解决,就是我不能随机使用ip,只能把一个跑死,然后换下一个。再测试,没问题了,一个区的27000条数据带带拉拉两天就爬了下来。

 总结,我的方式确实比较业余,但是也可以完成任务,只要网络好,一天在不影响其他事情的条件下,爬取10000条没有问题,这么算,我一个人一台电脑20几天就能完工,其实还不错,至少比起外业调查。如果用分布式,那就更快了。

这篇就先说到这,这才是第一步,后面还要写对这些POI数据进行专业的GIS处理,以便能够使用


 

猜你喜欢

转载自blog.csdn.net/u010723516/article/details/71213513
今日推荐