基于python的POI数据爬取、处理和使用(一)
来源:互联网 发布:商品销售数据分析 编辑:程序博客网 时间:2024/06/05 14:52
对于刚入职的半年的“新人”,多听听领导的建议还是大有裨益的。我们主任就说,新人要首先熟悉一下单位的业务,以及单位有哪些数据。在工作中,我就尽可能的了解一下这些,直到,我发现了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处理,以便能够使用
- 基于python的POI数据爬取、处理和使用(一)
- 基于python的POI数据爬取、处理和使用(二)
- 使用python及百度API对百度poi数据进行爬取(一)
- 使用python及百度API对百度poi数据进行爬取(二)
- 使用python及百度API对百度poi数据进行爬取(三)
- python爬取数据练习(一)
- 使用POI来处理Excel和Word文件格式(POI的介绍)
- python爬虫(3)——python爬取大规模数据的的方法和步骤
- Python爬虫(一)--城市公交网络站点数据的爬取
- python爬取网站数据保存使用的方法
- Python使用Selenium爬取淘宝异步加载的数据
- python使用scrapy爬取qq音乐(一)
- 使用python网络爬虫爬取新浪新闻(一)
- 使用Spark Streaming处理爬取的数据(问题总结)
- POI 导出Excel 时间格式和小数点数据的处理
- Java Web的Excel导出处理(基于POI)
- 利用Python爬取基于AES对称加密算法的网易云音乐用户评论数据
- Python的charts和Jupyter的使用 使数据可视化 对58同城的爬取
- 跪求一个OA系统
- 第一篇博客,记录下想法
- Redis在高并发下常见的错误场景-优惠券列表显示
- Xcode Analyze进行代码静态检查以及一些常见问题释疑
- C++数组基础
- 基于python的POI数据爬取、处理和使用(一)
- 在Windows 7 x64 上编译libsvn
- 第123课:Spark Streaming性能优化:通过Spark Streaming发现botnet及性能优化
- 老生常谈的跨域处理
- Android开发之--- 监测手机返回键的点击事件
- 如何处理数据中的缺失值??
- 还是畅通工程(Prim)
- sql_ERROR: ASCII
- ZigBee基本概念术语说明