利用Python来定位你所在地方!精确到五十米内!

与昨天那样一步一步在jupyter notebook中编写测试代码不同,今天分享的代码,主体部分已经被写到了一个函数当中,这样如果需要抓取一个新的区域只需要调用函数即可。当然这些代码仍然可以在jupyter notebook中运行,待会儿你看到的代码运行测试结果就是在jupyter中进行展示的。

运行环境:安装anaconda3即可,这是一个Python3的打包发行版。新手可查看之前的几篇文章:

欢迎大家加入小编创建的Python行业交流群,有大牛答疑,有资源共享,有企业招人!是一个非常不错的交流基地!群号:683380553

#导入需要使用的Python库

importrequests

importjson

importre

importpandasaspd

#--------------------------------------------- #

#定义从百度地图获取区域边界点经纬度的函数   #

#--------------------------------------------- #

defgetRegion_baidu(keyword):

#

获取uid的网址格式uidUrl="http://map.baidu.com/su?wd={}&cid=289&type=0&pc_ver=2"#通过格式化函数得到网址,并进行抓取r_uid=requests.get(uidUrl.format(keyword),

           headers={'user-agent':'Mozilla/5.0'})

   #编码转换r_uid.encoding='utf-8'#使用正则表达式提取内容uids=re.findall('[a-zA-Z0-9]{24}', r_uid.text)

   #用来保存区域边缘的点的经纬度lat_lng=[]

   #循环每一个子区域foruidinuids:

      #把网页上的数据抓取到本地poinstUrl='http://map.baidu.com/?pcevaname=pc4.1&qt=ext&uid=

                    {}&ext_ver=new&l=12'

r_point=requests.get(poinstUrl.format(uid),

                 headers={'user-agent':'Mozilla/5.0'})        r_point.encoding='ascii'#转换为python字典类型jd=json.loads(r_point.text)

       #使用正则表达式进行提取points=re.findall('[0-9]{8}.[0-9]+,[0-9]{7}.[0-9]+',

jd['content']['geo'])                sub_lat_lng=[]

#

将中间都逗号去掉forstrinpoints:

           #将经纬度分开,并得到实际的经纬度temp=str.split(',')            temp[0]=round(float(temp[0])/100000,6)            temp[1]=round(float(temp[1])/100000,6)                        sub_lat_lng.append(temp)

# 转换成dataframelat_lng.append(sub_lat_lng)        df=pd.DataFrame(lat_lng[0],columns=['longitude','latitude'])        df['name']=keyword

# 返回结果returndf

然后我们可以把这整段代码放在jupyter notebook中,运行,测试一下能否抓取到结果,这里我抓到了结果。

你还可以使用这个函数去抓另外一个区域,比如华南理工大学,通过这种函数的形式,把中间过程封装起来,使用的时候进行调用即可,非常方便。

注意:百度地图上并不能查到现实中存在的所有区域,因此有些区域是抓不到结果的哦~

我将在下一篇文章中,对这段代码中使用的知识点进行更进一步详细的解释,因为今天有点不舒服,所以写的不多。

猜你喜欢

转载自blog.csdn.net/qq_42156420/article/details/88597061
今日推荐