1. 注册百度地图开放平台账号
先注册百度地图开发平台账号,创建应用,获得AK
1. 平台地址:https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi 2. 注册好账号后登录,进入到百度地图开放平台控制台,如下图所示,创建应用,获取API接口连接权限AK,然后就可以开始写代码了。
2. 通过Python批量检索不同城市店铺POI数据
2.1 大致思路:
1. 设置好URL格式,按照行政区进行检索,通过requests模块访问URL获取数据; 2. 对检索到JSON数据进行解析,提取需要的字段数据; 3. 保存数据为CSV格式; 4. 准备好全国行政区清单,设置好循环检索程序,批量检索所有城市数据; 5. 运行程序获取数据,并对数据进行去重等操作。
2.2 具体代码:
"""
采集百度地图上关于搜索“母婴”的店铺数据
API介绍:https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi
"""
import requests
import json
import pandas as pd
import time
import xlrd
import random
class GetBaiduMapInfo(object):
"""通过城市搜索,采集百度地图店铺数据"""
def __init__(self):
"""初始化"""
self.AK = "XXXXXXXX"
self.city = None
self.keywords = '母婴'
self.url = "http://api.map.baidu.com/place/v2/search?query="
self.set = "&page_size=20&scope=1&city_limit=True®ion="
self.params = {'page_num': 0}
self.items = []
self.city_no = [a for a in range(369)]
random.shuffle(self.city_no)
def get_data(self):
"""按行政区划区域检索:获取所有搜索页面数据"""
self.items = []
url = self.url + self.keywords + self.set + self.city + "&output=json&ak=" + self.AK
request = requests.get(url, params=self.params)
print("正在获取【%s】关于“%s”店铺的数据!" % (self.city, self.keywords))
total = json.loads(request.text)['total']
print("本次搜索结果数据总条数:", total)
total_page_num = (total + 19) // 20
print("数据页数:共计 %d 页" % total_page_num)
for i in range(total_page_num):
print("正在获取第 %d 页数据" % (i+1))
self.params['page_num'] = i
time.sleep(0.5)
self.parse_map_data(url)
print("本次共采集有效数据 %d 条!" % len(self.items))
if len(self.items) > 10:
self.save_to_csv()
return True
else:
return False
def parse_map_data(self, url):
"""解析页面店铺数据"""
request = requests.get(url, params=self.params)
time.sleep(0.6)
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']
uid = item['uid']
new_item = (name, telephone, province, city, area, address, uid)
print(new_item)
self.items.append(new_item)
def get_all_city_data(self):
"""从CSV文件中读取城市清单"""
city_data = pd.read_csv('./城市数据采集状态3.csv', encoding='utf-8')
city_list = city_data.values.tolist()
for i in self.city_no:
if city_list[i][3] == 0:
self.city = city_list[i][2]
try:
yes = self.get_data()
if yes:
city_list[i][3] = 1
except Exception as result:
print("【%s】的数据获取出错,错误如下:" % self.city)
print(result)
a = random.uniform(1, 2)
time.sleep(a)
new_city_df = pd.DataFrame(city_list, columns=['编号', '省级行政区', '城市', '采集状态'])
new_city_df.to_csv('城市数据采集状态4.csv', index=False, encoding='utf-8', mode='a')
print('数据采集结束,【城市数据采集状态4.csv】保存成功!')
def save_to_csv(self):
"""保存数据为CSV格式"""
df = pd.DataFrame(self.items, columns=['name', 'telephone', 'province', 'city', 'area', 'address', 'uid'])
df.to_csv('母婴数据2.csv', index=False, encoding='utf-8', mode='a')
print("数据保存成功!")
def drop_duplicates(self):
"""通过pandas去掉数据中的重复值"""
raw_data_df = pd.read_csv('./母婴数据2.csv', encoding='utf-8')
print(raw_data_df)
new_data_df = raw_data_df.drop_duplicates(subset=['uid'], keep='first').reset_index(drop=True)
print("数据去重成功!")
new_data_df.to_csv('母婴数据2.csv', index=False, encoding='utf-8', mode='a')
def mark_city_condition(self):
"""标记已采集数据的城市采集状态为 1,避免重复采集"""
df_muying = pd.read_csv('./母婴数据2.csv', encoding='utf-8')
print(df_muying['city'])
new_muying_df = df_muying.drop_duplicates(subset=['city'], keep='first').reset_index(drop=True)
muying_list = new_muying_df.values.tolist()
muying_city_list = [muying_list[a][3] for a in range(len(muying_list))]
print(muying_city_list)
df_city = pd.read_csv('./全国省市清单.csv', encoding='utf-8')
city_list = df_city.values.tolist()
i = 0
while i < 369:
if city_list[i][2] in muying_city_list:
city_list[i][3] = 1
i += 1
new_city_df = pd.DataFrame(city_list, columns=['编号', '省级行政区', '城市', '采集状态'])
new_city_df.to_csv('城市数据采集状态1.csv', index=False, encoding='utf-8', mode='a')
print('数据采集结束,【城市数据采集状态1.csv】保存成功!')
def main():
getinfo = GetBaiduMapInfo()
getinfo.get_all_city_data()
if __name__ == "__main__":
main()
3. 数据结果示例如下
以“母婴”为关键词进行检索,数据示例如下,仅展示部分内容,有需要可以联系我:
name,telephone,province,city,area,address,uid 爱婴室(罗秀路店),"(021)54299856,18939735937",上海市,上海市,闵行区,上海市闵行区罗秀路1373号,d991e1163582844c1f389426 爱婴室(松江店),(021)57817665,上海市,上海市,松江区,上海市松江区谷阳北路155号9-10号,a3f21eeed462755d2eb17e94 丽婴房(七莘路店),(021)33579288,上海市,上海市,闵行区,上海市闵行区七莘路1855号,5e53af1ad385bf464151c0ce 妈妈咪呀母婴用品(长乐路店),13611965321,上海市,上海市,静安区,上海市静安区长乐路宣教大楼南侧约40米,68f2b5ede07d1ad3fb221340 婴乐园母婴用品生活馆(曹行店),(021)54335027,上海市,上海市,闵行区,上海市闵行区金都路940号,84594fcdaa88ad20ca2915e8 婴儿用品专卖店,13524885901,上海市,上海市,浦东新区,上海市浦东新区北园路116号,13dc020c7c5ee60195ca0773 婴玛特母婴用品连锁(超市泗泾店),(021)57895169,上海市,上海市,松江区,上海市松江区泗泾镇鼓浪路749号,ec02bd04237231b16949f342 孩子王(大华店),(021)66070623,上海市,上海市,宝山区,上海市宝山区大华路518号伊仕顿广场F3,9f7f8d45a01f90e0f4231094 贝齐母婴用品(华新旗舰店),(021)59790313,上海市,上海市,青浦区,上海市青浦区华新镇新苗路45号,55ff38257bd6fb2ea1046497
4. 全国城市或行政区清单(资源福利)
全国省级或直辖行政区清单如下:
编号,省级行政区,城市,采集状态
1,上海市,上海市,0
2,北京市,北京市,0
3,天津市,天津市,0
4,重庆市,重庆市,0
5,广东省,东莞市,0
6,广东省,广州市,0
7,广东省,中山市,0
8,广东省,深圳市,0
9,广东省,惠州市,0
10,广东省,江门市,0
11,广东省,珠海市,0
12,广东省,汕头市,0
13,广东省,佛山市,0
14,广东省,湛江市,0
15,广东省,河源市,0
16,广东省,肇庆市,0
17,广东省,潮州市,0
18,广东省,清远市,0
19,广东省,韶关市,0
20,广东省,揭阳市,0
21,广东省,阳江市,0
22,广东省,云浮市,0
23,广东省,茂名市,0
24,广东省,梅州市,0
25,广东省,汕尾市,0
26,山东省,济南市,0
27,山东省,青岛市,0
28,山东省,临沂市,0
29,山东省,济宁市,0
30,山东省,菏泽市,0
31,山东省,烟台市,0
32,山东省,泰安市,0
33,山东省,淄博市,0
34,山东省,潍坊市,0
35,山东省,日照市,0
36,山东省,威海市,0
37,山东省,滨州市,0
38,山东省,东营市,0
39,山东省,聊城市,0
40,山东省,德州市,0
41,山东省,莱芜市,0
42,山东省,枣庄市,0
43,江苏省,苏州市,0
44,江苏省,徐州市,0
45,江苏省,盐城市,0
46,江苏省,无锡市,0
47,江苏省,南京市,0
48,江苏省,南通市,0
49,江苏省,连云港市,0
50,江苏省,常州市,0
51,江苏省,扬州市,0
52,江苏省,镇江市,0
53,江苏省,淮安市,0
54,江苏省,泰州市,0
55,江苏省,宿迁市,0
56,河南省,郑州市,0
57,河南省,南阳市,0
58,河南省,新乡市,0
59,河南省,安阳市,0
60,河南省,洛阳市,0
61,河南省,信阳市,0
62,河南省,平顶山市,0
63,河南省,周口市,0
64,河南省,商丘市,0
65,河南省,开封市,0
66,河南省,焦作市,0
67,河南省,驻马店市,0
68,河南省,濮阳市,0
69,河南省,三门峡市,0
70,河南省,漯河市,0
71,河南省,许昌市,0
72,河南省,鹤壁市,0
73,河南省,济源市,0
74,河北省,石家庄市,0
75,河北省,唐山市,0
76,河北省,保定市,0
77,河北省,邯郸市,0
78,河北省,邢台市,0
79,河北省,河北区,0
80,河北省,沧州市,0
81,河北省,秦皇岛市,0
82,河北省,张家口市,0
83,河北省,衡水市,0
84,河北省,廊坊市,0
85,河北省,承德市,0
86,浙江省,温州市,0
87,浙江省,宁波市,0
88,浙江省,杭州市,0
89,浙江省,台州市,0
90,浙江省,嘉兴市,0
91,浙江省,金华市,0
92,浙江省,湖州市,0
93,浙江省,绍兴市,0
94,浙江省,舟山市,0
95,浙江省,丽水市,0
96,浙江省,衢州市,0
97,香港,香港,0
98,陕西省,西安市,0
99,陕西省,咸阳市,0
100,陕西省,宝鸡市,0
101,陕西省,汉中市,0
102,陕西省,渭南市,0
103,陕西省,安康市,0
104,陕西省,榆林市,0
105,陕西省,商洛市,0
106,陕西省,延安市,0
107,陕西省,铜川市,0
108,湖南省,长沙市,0
109,湖南省,邵阳市,0
110,湖南省,常德市,0
111,湖南省,衡阳市,0
112,湖南省,株洲市,0
113,湖南省,湘潭市,0
114,湖南省,永州市,0
115,湖南省,岳阳市,0
116,湖南省,怀化市,0
117,湖南省,郴州市,0
118,湖南省,娄底市,0
119,湖南省,益阳市,0
120,湖南省,张家界市,0
121,湖南省,湘西州,0
122,福建省,漳州市,0
123,福建省,泉州市,0
124,福建省,厦门市,0
125,福建省,福州市,0
126,福建省,莆田市,0
127,福建省,宁德市,0
128,福建省,三明市,0
129,福建省,南平市,0
130,福建省,龙岩市,0
131,云南省,昆明市,0
132,云南省,红河州,0
133,云南省,大理州,0
134,云南省,文山州,0
135,云南省,德宏州,0
136,云南省,曲靖市,0
137,云南省,昭通市,0
138,云南省,楚雄州,0
139,云南省,保山市,0
140,云南省,玉溪市,0
141,云南省,丽江地区,0
142,云南省,临沧地区,0
143,云南省,思茅地区,0
144,云南省,西双版纳州,0
145,云南省,怒江州,0
146,云南省,迪庆州,0
147,四川省,成都市,0
148,四川省,绵阳市,0
149,四川省,广元市,0
150,四川省,达州市,0
151,四川省,南充市,0
152,四川省,德阳市,0
153,四川省,广安市,0
154,四川省,阿坝州,0
155,四川省,巴中市,0
156,四川省,遂宁市,0
157,四川省,内江市,0
158,四川省,凉山州,0
159,四川省,攀枝花市,0
160,四川省,乐山市,0
161,四川省,自贡市,0
162,四川省,泸州市,0
163,四川省,雅安市,0
164,四川省,宜宾市,0
165,四川省,资阳市,0
166,广西壮族自治区,贵港市,0
167,广西壮族自治区,玉林市,0
168,广西壮族自治区,北海市,0
169,广西壮族自治区,南宁市,0
170,广西壮族自治区,柳州市,0
171,广西壮族自治区,桂林市,0
172,广西壮族自治区,梧州市,0
173,广西壮族自治区,钦州市,0
174,广西壮族自治区,来宾市,0
175,广西壮族自治区,河池市,0
176,广西壮族自治区,百色市,0
177,广西壮族自治区,贺州市,0
178,广西壮族自治区,崇左市,0
179,广西壮族自治区,防城港市,0
180,安徽省,芜湖市,0
181,安徽省,合肥市,0
182,安徽省,六安市,0
183,安徽省,宿州市,0
184,安徽省,阜阳市,0
185,安徽省,安庆市,0
186,安徽省,马鞍山市,0
187,安徽省,蚌埠市,0
188,安徽省,淮北市,0
189,安徽省,淮南市,0
190,安徽省,宣城市,0
191,安徽省,黄山市,0
192,安徽省,铜陵市,0
193,安徽省,亳州市,0
194,安徽省,池州市,0
195,安徽省,巢湖市,0
196,安徽省,滁州市,0
197,海南省,三亚市,0
198,海南省,海口市,0
199,海南省,琼海市,0
200,海南省,文昌市,0
201,海南省,东方市,0
202,海南省,昌江县,0
203,海南省,陵水县,0
204,海南省,乐东县,0
205,海南省,五指山市,0
206,海南省,保亭县,0
207,海南省,澄迈县,0
208,海南省,万宁市,0
209,海南省,儋州市,0
210,海南省,临高县,0
211,海南省,白沙县,0
212,海南省,定安县,0
213,海南省,琼中县,0
214,海南省,屯昌县,0
215,宁夏回族自治区,银川市,0
216,宁夏回族自治区,吴忠市,0
217,宁夏回族自治区,中卫市,0
218,宁夏回族自治区,石嘴山市,0
219,宁夏回族自治区,固原市,0
220,吉林省,吉林市,0
221,吉林省,长春市,0
222,吉林省,白山市,0
223,吉林省,白城市,0
224,吉林省,延边州,0
225,吉林省,松原市,0
226,吉林省,辽源市,0
227,吉林省,通化市,0
228,吉林省,四平市,0
229,西藏自治区,拉萨市,0
230,西藏自治区,山南地区,0
231,西藏自治区,林芝地区,0
232,西藏自治区,日喀则地区,0
233,西藏自治区,阿里地区,0
234,西藏自治区,昌都地区,0
235,西藏自治区,那曲地区,0
236,新疆维吾尔自治区,乌鲁木齐市,0
237,新疆维吾尔自治区,伊犁州,0
238,新疆维吾尔自治区,昌吉州,0
239,新疆维吾尔自治区,石河子市,0
240,新疆维吾尔自治区,哈密地区,0
241,新疆维吾尔自治区,阿克苏地区,0
242,新疆维吾尔自治区,巴音郭楞州,0
243,新疆维吾尔自治区,喀什地区,0
244,新疆维吾尔自治区,塔城地区,0
245,新疆维吾尔自治区,克拉玛依市,0
246,新疆维吾尔自治区,和田地区,0
247,新疆维吾尔自治区,阿勒泰州,0
248,新疆维吾尔自治区,吐鲁番地区,0
249,新疆维吾尔自治区,阿拉尔市,0
250,新疆维吾尔自治区,博尔塔拉州,0
251,新疆维吾尔自治区,五家渠市,0
252,新疆维吾尔自治区,克孜勒苏州,0
253,新疆维吾尔自治区,图木舒克市,0
254,青海省,西宁市,0
255,青海省,海西州,0
256,青海省,海东地区,0
257,青海省,海北州,0
258,青海省,果洛州,0
259,青海省,玉树州,0
260,青海省,黄南藏族自治州,0
261,甘肃省,兰州市,0
262,甘肃省,天水市,0
263,甘肃省,庆阳市,0
264,甘肃省,武威市,0
265,甘肃省,酒泉市,0
266,甘肃省,张掖市,0
267,甘肃省,陇南地区,0
268,甘肃省,白银市,0
269,甘肃省,定西地区,0
270,甘肃省,平凉市,0
271,甘肃省,嘉峪关市,0
272,甘肃省,临夏回族自治州,0
273,甘肃省,金昌市,0
274,甘肃省,甘南州,0
275,贵州省,贵阳市,0
276,贵州省,黔东南州,0
277,贵州省,黔南州,0
278,贵州省,遵义市,0
279,贵州省,黔西南州,0
280,贵州省,毕节地区,0
281,贵州省,铜仁地区,0
282,贵州省,安顺市,0
283,贵州省,六盘水市,0
284,澳门,澳门,0
285,内蒙古自治区,赤峰市,0
286,内蒙古自治区,包头市,0
287,内蒙古自治区,通辽市,0
288,内蒙古自治区,呼和浩特市,0
289,内蒙古自治区,乌海市,0
290,内蒙古自治区,鄂尔多斯市,0
291,内蒙古自治区,呼伦贝尔市,0
292,内蒙古自治区,兴安盟,0
293,内蒙古自治区,巴彦淖尔盟,0
294,内蒙古自治区,乌兰察布盟,0
295,内蒙古自治区,锡林郭勒盟,0
296,内蒙古自治区,阿拉善盟,0
297,黑龙江,齐齐哈尔市,0
298,黑龙江,哈尔滨市,0
299,黑龙江,大庆市,0
300,黑龙江,佳木斯市,0
301,黑龙江,双鸭山市,0
302,黑龙江,牡丹江市,0
303,黑龙江,鸡西市,0
304,黑龙江,黑河市,0
305,黑龙江,绥化市,0
306,黑龙江,鹤岗市,0
307,黑龙江,伊春市,0
308,黑龙江,大兴安岭地区,0
309,黑龙江,七台河市,0
310,辽宁省,大连市,0
311,辽宁省,沈阳市,0
312,辽宁省,丹东市,0
313,辽宁省,辽阳市,0
314,辽宁省,葫芦岛市,0
315,辽宁省,锦州市,0
316,辽宁省,朝阳市,0
317,辽宁省,营口市,0
318,辽宁省,鞍山市,0
319,辽宁省,抚顺市,0
320,辽宁省,阜新市,0
321,辽宁省,本溪市,0
322,辽宁省,盘锦市,0
323,辽宁省,铁岭市,0
324,山西省,太原市,0
325,山西省,大同市,0
326,山西省,运城市,0
327,山西省,长治市,0
328,山西省,晋城市,0
329,山西省,忻州市,0
330,山西省,临汾市,0
331,山西省,吕梁市,0
332,山西省,晋中市,0
333,山西省,阳泉市,0
334,山西省,朔州市,0
335,湖北省,武汉市,0
336,湖北省,宜昌市,0
337,湖北省,襄樊市,0
338,湖北省,荆州市,0
339,湖北省,恩施州,0
340,湖北省,孝感市,0
341,湖北省,黄冈市,0
342,湖北省,十堰市,0
343,湖北省,咸宁市,0
344,湖北省,黄石市,0
345,湖北省,仙桃市,0
346,湖北省,随州市,0
347,湖北省,天门市,0
348,湖北省,荆门市,0
349,湖北省,潜江市,0
350,湖北省,鄂州市,0
351,湖北省,神农架林区,0
352,江西省,南昌市,0
353,江西省,赣州市,0
354,江西省,上饶市,0
355,江西省,吉安市,0
356,江西省,九江市,0
357,江西省,新余市,0
358,江西省,抚州市,0
359,江西省,宜春市,0
360,江西省,景德镇市,0
361,江西省,萍乡市,0
362,江西省,鹰潭市,0
363,台湾省,台北市,0
364,台湾省,高雄市,0
365,台湾省,台中市,0
366,台湾省,新竹市,0
367,台湾省,基隆市,0
368,台湾省,台南市,0
369,台湾省,嘉义市,0
|