Python3 | 通過百度地圖API獲取商家詳細信息


Python3 | 通過百度地圖API獲取商家詳細信息(包括店名,地址,經緯度,電話)

一、打開百度地圖開放平台,選擇Web服務API 。

​​​​​​官方文檔對API接口的調用描述的比較詳細,在調用之前先要申請百度地圖的賬號,然后申請密鑰,獲取密鑰的步驟官方也有說明。

二、通過百度地圖API獲取商家詳細信息是調用的地點檢索接口,總共有四種方式的服務,按情況選擇適合的一種。

行政區划區域檢索

http://api.map.baidu.com/place/v2/search?query=ATM機&tag=銀行&region=北京&output=json&ak=您的ak //GET請求

參數含義在文檔中也有說明,除了必選的,其他的都可以看情況選擇哪一個的。以下代碼調用的是行政區划區域檢索的服務。

python代碼:

  1.  
    # coding=gbk
  2.  
    # 指定編碼格式,防止亂碼
  3.  
     
  4.  
    import requests
  5.  
     
  6.  
     
  7.  
    #百度地圖API搜索
  8.  
    def baidu_search(query, region):
  9.  
    url = 'http://api.map.baidu.com/place/v2/search?'
  10.  
    output = 'json'
  11.  
    ak = 'vLyZjPkryKy5Mn2LG1fp6ColMGFfFFiu'
  12.  
    uri = url + 'query=' + query + '&region='+region+'&output=' + output + '&ak=' + ak
  13.  
    r = requests.get(uri)
  14.  
    response_dict = r.json()
  15.  
    results = response_dict[ "results"]
  16.  
    for adr in results:
  17.  
    name = adr[ 'name']
  18.  
    location= adr[ 'location']
  19.  
    lng = float(location[ 'lng'])
  20.  
    lat = float(location[ 'lat'])
  21.  
    address = adr[ 'address']
  22.  
    telephone = adr[ 'telephone']
  23.  
    print( '名稱:'+name)
  24.  
    print( '坐標:%f,%f' %(lat,lng))
  25.  
    print( '地址:'+address)
  26.  
    print( '電話:'+telephone)
  27.  
     
  28.  
    baidu_search( '海底撈','廣州')
運行結果:
  1.  
    名稱:海底撈(珠影星光城店)
  2.  
    坐標:23.100115,113.328013
  3.  
    地址:廣州市海珠區新港中路354號珠影星光城F1
  4.  
    電話:(020)89440008
  5.  
    名稱:海底撈(廣州百信廣場店)
  6.  
    坐標:23.200748,113.268490
  7.  
    地址:白雲區機場路1309號百信廣場3層3037號
  8.  
    電話:(020)36636088
  9.  
    名稱:海底撈(奧園廣場店)
  10.  
    坐標:22.929717,113.363430
  11.  
    地址:廣州市番禺區福德路317號奧園廣場F4
  12.  
    電話:(020)39180790
  13.  
    名稱:海底撈(奧園廣場店)
  14.  
    坐標:22.929696,113.363434
  15.  
    地址:番禺區橋南街福德路奧園廣場4層
  16.  、

 

 

 

 

 

import requests import json import pandas as pd def request_hospital_data(): ak="換成自己的 AK" # 換成自己的 AK,需要申請 ct = ('衢州','寧波','台州','溫州','麗水','杭州','湖州','金華') keywords=('粥') url = ["http://api.map.baidu.com/place/v2/search?query="+keywords+"&page_size=20&scope=1&region=" + cs + "&output=json&ak=" + ak for cs in ct] params = {'page_num':0} # 請求參數,頁碼 for url1 in url: #print(url1) request = requests.get(url1,params=params) #print(request)# 請求數據 total = json.loads(request.text)['total'] # 數據的總條數 #print(total) total_page_num = (total+19) // 20 # 每個頁面大小是20,計算總頁碼 items = [] # 存放所有的記錄,每一條記錄是一個元素 for i in range(total_page_num): params['page_num'] = i request = requests.get(url1,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'] #print(name,telephone,province,city,area,address) new_item = (name,telephone,province,city,area,address) #print(new_item) items.append(new_item) #使用pandas的DataFrame對象保存二維數組 df = pd.DataFrame(items, columns=['name','telephone','province','city','area','address']) print(df) #df.drop_duplicates(inplace=True) df.to_csv('粥1.csv', index=False,encoding='',mode='a') request_hospital_data()

原文鏈接:https://blog.csdn.net/weixin_45206990/article/details/108251724

 

用Python抓取百度地圖里的店名,地址和聯系方式

發表: 2017-03-15 瀏覽: 2647

昨晚看到一篇爬取百度地圖信息的的代碼,我更改了城市,關鍵詞,頁碼等,完成了獲取有關“篩網”店鋪的信息。
代碼如下:

import requests
import re
import csv
import time


def BusinessFromBaiduDitu(citycode = '287',key_word='篩網',pageno=0):
parameter = {
"newmap": "1",
"reqflag": "pcmap",
"biz": "1",
"from": "webmap",
"da_par": "direct",
"pcevaname": "pc4.1",
"qt": "con",
"c": citycode, # 城市代碼
"wd": key_word, # 搜索關鍵詞
"wd2": "",
"pn": pageno, # 頁數
"nn": pageno * 10,
"db": "0",
"sug": "0",
"addr": "0",
"da_src": "pcmappg.poi.page",
"on_gel": "1",
"src": "7",
"gr": "3",
"l": "12",
"tn": "B_NORMAL_MAP",
# "u_loc": "12621219.536556,2630747.285024",
"ie": "utf-8",
# "b": "(11845157.18,3047692.2;11922085.18,3073932.2)", #這個應該是地理位置坐標,可以忽略
"t": "1468896652886"}

headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87Safari/537.36'}

url = 'http://map.baidu.com/'
htm = requests.get(url, params=parameter, headers=headers)
htm = htm.text.encode('latin-1').decode('unicode_escape') # 轉碼
pattern = r'(?<=\baddress_norm":"\[).+?(?="ty":)'
htm = re.findall(pattern, htm) # 按段落匹配

for r in htm:
pattern = r'(?<=\b"\},"name":").+?(?=")'
name = re.findall(pattern, r)
#if not name:
pattern = r'(?<=\b,"name":").+?(?=")'
name = re.findall(pattern, r)
#print(name[0]) # 名稱

pattern = r'.+?(?=")'
adr = re.findall(pattern, r)
pattern = r'\(.+?\['
address = re.sub(pattern, ' ', adr[0])
pattern = r'\(.+?\]'
address = re.sub(pattern, ' ', address)
#print(address) # 地址

pattern = r'(?<="phone":").+?(?=")'
phone = re.findall(pattern, r)
try:
if phone[0] and '",' != phone[0]:
phone_list = phone[0].split(sep=',')
for number in phone_list:
if re.match('1', number):
print(citycode+name[0]+','+address+','+number)
writer.writerow((name[0], address, number))
except:
continue
print(citycode + ' ' + key_word + ' ' + str(pageno))

現在開始寫我搜“絲網”“篩網”(key_word)的代碼獲取想要的數據,也要改城市代碼(citycode)城市代碼文件鏈接

#citynumlist是百度地圖城市代碼列表
citynumlist = ['33','34','35'
'''''''''''''''''
'370','371','372']
keywordlist = ['絲網','篩網']

start = time.time()
num = 1

#建立csv文件,保存數據
csvFile = open(r'/Users/apple888/PycharmProjects/百度地圖/Data/%s.csv' % 'CityData','a+', newline='', encoding='utf-8')
writer = csv.writer(csvFile)
writer.writerow(('name', 'address', 'number'))


for citycode in citynumlist:
for kw in keywordlist:
for page in range(10):
BusinessFromBaiduDitu(citycode=citycode, key_word=kw, pageno=page)

#防止訪問頻率太高,避免被百度公司封
time.sleep(1)
if num%20 == 0:
time.sleep(2)
if num%100== 0:
time.sleep(3)
if num%200==0:
time.sleep(7)
num = num + 1

end = time.time()
lasttime = int((end-start))
print('耗時'+str(lasttime)+'s')

程序運行了大約三個小時,抓取了1085條有用信息信息

 

 

python爬取地圖地址_網絡爬蟲-python爬取高德地圖地點

python爬取你想要的數據,近期由於業務需求,用python爬取了高德地圖一些地點的數據,爬出來數據大致情況如下:

image

下面是基本流程:

2.安裝網絡爬取第三方庫,主要是下面三個(pip install 安裝);

from urllib.parse import **quote**

from urllib import **request**

import **json**

3.創建網絡爬蟲爬取數據,並對數據進行解析(這塊就直接上代碼了);

from urllib.parse import quote

from urllib import request

import json

# import xlwt

web_key = '**********' #自己高德的地圖的key密鑰

url = "http://restapi.amap.com/v3/place/text"

cityname = "南京" # 自己需要搜索城市

classfiled = "汽車站" # 自己需要搜索的目的地信息(比如想搜索醫院,直接替換成醫院即可)

i=0 # 爬取的頁面信息,i=2時即爬取第2頁的數據。當 result['count']=0 時即此頁面已經無信息,爬取所有數據時可以用此終止循環

req_url = **url** + "?key=" + **web_key** + '&extensions=all&keywords=' + quote(**classfiled**) + '&city=' + quote(**cityname**) + '&citylimit=true' + '&offset=25' + '&page=' + **str( i) **+ '&output=json'

data = ''

f=request.urlopen(req_url)

data = f.read()

data = data.decode('utf-8')

result=json.loads(data)

# print(result['count']) # 等於0時,即代表此頁面已經無信息

result['pois'][0] #顯示數據記錄格式

處理過會,基本的網頁信息就出來了

image

以上的數據是以字典的形式打印出來的,把自己需要獲取的字段提出出來就可以了:

for i in range(len(result['pois'])):

print('名稱:',result['pois'][i]['name']

,'\n類型:',result['pois'][i]['type']

,'\n省份:',result['pois'][i]['pname']

,'\n城市:',result['pois'][i]['cityname']

,'\n地區:',result['pois'][i]['adname']

,'\n鄉鎮:',result['pois'][i]['business_area']

,'\n詳細地址:',result['pois'][i]['address']

,'\n經緯度:',result['pois'][i]['location']

,'\n圖片鏈接:',result['pois'][i]['photos'][0]['url']

,'\n'

)

部分數據結果如下:

image

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM