Python利用百度地图抓取商家地址

前言:
还在一个一个的查找商家的信息以及地址,别忘记了,现在已经是信息时代了,还有什么是不能用技术解决的。

背景:有的时候我们需要批量获取这个城市某个行业的全部商家信息,以便打电话调研行业信息,一个个查询,效率太低,如果能够批量获

取商家地址和联系方式的信息会事半功倍。

在这里插入图片描述

实现过程:

我们先看一下全部的Python语句。

Python学习交流Q群:906715085###
import requests
import json
import pandas as pd
def request_hospital_data(ct,keywords):    
ak="zCHWeNGOn0Gopj3IbbO2gGGiENRRzfnC"  # 换成自己的 AK,需要申请    
url = "http://api.map.baidu.com/place/v2/search?query="+keywords+"&page_size=20&scope=1&region=" + ct + "&output=json&ak=" + ak    params = {
    
    'page_num':0}  # 请求参数,页码    
request = requests.get(url,params=params)    
total = json.loads(request.text)['total']     # 数据的总条数    
total_page_num = (total+19) // 20  # 每个页面大小是20,计算总页码    items = []  # 存放所有的记录,每一条记录是一个元素    for i in range(total_page_num):        
params['page_num'] = i        
request = requests.get(url,params=params)        
for item in json.loads(request.text)['results']:            
if "telephone" in item:   #为了保证查询结果中包含电话信息                
name = item['name']                
telephone = item.get('telephone', '') #如果没有电话则返回默认值,即第二个参数                
province = item['province']                
city = item['city']                
area = item['area']                
address = item['address']
new_item = (name,telephone,province,city,area,address)
items.append(new_item)        #使用pandas的DataFrame对象保存二维数组        
df = pd.DataFrame(items, columns=['name','telephone','province','city','area','address'])        
print(df)
df.to_excel("E:/公众号/地图采集/" + keywords + "_" + ct + ".xlsx")
request_hospital_data('参数一','参数二')

在实现这串代码正常运行之前,需要在百度地图开发平台(https://lbsyun.baidu.com/index.php)申请自己的AK,作用类似我们可以获取百度地图的接口。

申请步骤:

1.将上述网址复制之后,我们进入百度地图开发平台首页;

2.在搜索框(上表标红框的位置)搜索“AK”,点击第2个“获取密钥(AK)流程”,按照流程申请即可。

在这里插入图片描述

注意事项:

1.申请的时候需要自己的IP地址,如果不知道自己的IP地址可以直接百度“IP地址”,百度就会告知你自己的IP地址;

2.IP地址可能会变,所以不同日期的执行语句的时候,需要在设置(红框位置)修改AK的IP地址。

如果单纯使用的话,按照上文介绍的方法申请自己的AK,将语句中我的AK替换为自己的AK,更改request_hospital_data(‘参数一’,‘参数二’)

两个参数更改为自己要搜索的城市和关键词就可以运行了。

下面是对语句的详解,不感兴趣可以跳出了。

import requests # Requests是一常用的http请求库,它使用python语言编写,可以方便地发送http请求,以及方便地处理响应结果。

import json #主要用于将python对象编码为json格式输出或存储,以及将json格式对象解码为python对象。

import pandas as pd # Pandas库是Python中最流行的数据操作库。可实现基础的数据处理工作。

def #定义函数,调用函数。就是对一个新函数的自定义,有简单的函数也有复杂的函数。在一对括号中可以附上一些变量名;在行的末尾加冒号.

例如“def request_hospital_data(ct,keywords):”,我们自定义函数名request_hospital_data(ct,keywords),里面有两个参数ct,keywords,第
在这里插入图片描述

一个参数是城市名称,第二个参数是搜索的关键词。

这个函数的好处是可以重复调用,减少重复的代码量。

for #循环可以遍历任何序列的项目,如一个列表或者一个字符串。

在我们的实例中,有两个for语句,第一个for是对查询结果页面的循环,第二个for是对同一页面的所有查询结果的循环。

if判断语句在本例中主要是筛选出有电话信息的结果,防止对无效信息的抓取。

to_excel 是将最后的运算结果保存进Excel文件,为了方便对文件进行区分,将文件名由关键词+城市两部分组成。

写在最后

我们通过AK密钥方式访问的是百度公司给IT开发人员使用的地图,与用户使用的百度地图不是同一个地图,所以这个方法搜索出来的信息,

与直接在网页版百度地图搜索的结果有差异,批量搜索可以使用该方法,搜索结果较少时请直接使用百度地图。

直接在百度地图爬取信息难度较大,后面再和大家分享。喜欢这篇文章的小伙伴记得点赞收藏,有问题的小伙伴可以提出问题哟!!!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xff123456_/article/details/125223321