遗传算法可视化项目(2):获取信息

2019-07-26 17:17:39 浏览数 (1)

昨天讲了一下实现遗传算法可视化的概述,没看过的人或者今天才关注的人点一下历史消息,或者点这里:

遗传算法可视化项目(1):概述

今天可没时间继续讲概述了,开始实现第一步:获取信息!

获取经纬度的方式太多了,百度地图API,高德地图API……今天,我不会调用一个地图的API,我要使用Python里面的一个强大的第三方库——geopy(地理数据处理库)来获取经纬度。要想使用geopy库,第一步必定是安装库,先点击开始菜单,然后找到Anaconda3(64-bit)(32位系统会显示32-bit)并单击,然后点击Anaconda Prompt,出来了一个类似于cmd命令行的东西,接着确保电脑连上了网,最后直接在那个命令行里面输入pip install geopy等待安装完成即可!

安装成功之后,就要使用它来获取经纬度了。我们只需要用到geopy包中的geocoders模块里面的一个叫Nominatim的类就行了(geopy库还有其他的功能,比如距离,在这里我就不一一详细讲解了,以后有时间我会讲,大家暂时就先参考一下官方文档:http://geopy.readthedocs.io/en/stable/),成功导入Nominatim类然后就是编写获取经纬度的函数了,函数参数类型是一个字符串(地名),函数返回值是一个元组(经度,纬度),代码如下图:

看上去确实比调用百度地图API简单了好多,但获取信息终究还是离不开爬虫!因为我的那个函数需要传入地名这个字符串参数,海南省好多个镇,我才懒得一个个去想,还是找一个地名网站爬一下吧,在这里我用的是这个网站:http://www.tcmap.com.cn/hainan/,进入网页之后随便找一个镇,右击“审查元素”,出来的差不多是这个:

找到信息源之后就是编写爬虫代码了,首先导入开发包:

然后就是读取网页,代码如下:

接着用BeautifulSoup进行解析:

最后就是写正则来进行筛选:

到这里,爬取地名的部分已经完成,接着只要结合geocodeN那个函数获取经纬度即可,上面的代码修改成这样就行了:

这样是不是意味着就可以写入文件了呢?!知道能不能写入文件运行一下看看,如果没有引起异常而崩溃就说明写入文件没问题,运行结果:

很明显出现了问题,出现问题的原因是因为爬到的地名无法解析,无法解析的地名的location就为None,None没有longitude属性。如何避免这种情况,也就只有try...except...了,修改代码如下:

解析不出来的地名只能pass掉了

,再次运行看看:

安静的结束了,没有一点异常,该把输出的内容写入文件了,修改代码如下:

写入文件之后,文件最后的空行一定要删除,到以后我会把这个文件变成一个二维数组(C语言实现)a[ROW][3](ROW表示有多少条信息,3表示一个字符串数组{地名,经度,纬度}),如果空行不删,到时候会数组越界(明明最后一行只有一个回车符,如果获取最后一行的第二列元素就会越界,因为最后一行没有第二列),但如果删掉了文件最后的空行之后最后一行就有第二列了,就不会越界了!我还会持续更新,文章最后附上项目地址:https://github.com/3480430977/DataVisualizationOfGA

0 人点赞