資源簡介
Python代碼,可以用來爬取百度地圖上的小區數據,但當然可以爬取學校,還有公園,并且獲得經緯度
代碼片段和文件信息
#?coding:?utf-8
#?In[?]:
#爬別的poi就把小區改成其他的,比如銀行,中學。爬取其他區域的,就把bounds的經緯度修改,bounds的經緯度可以通過
#百度地圖開發者網站,開發文檔里面的拾取坐標。
#?In[?]:
#變量主要修改,las根據區域的大小進行修改,可以看到底劃分了多少個正方形。
#?In[?]:
http://api.map.baidu.com/place/v2/search?query=小區&bounds=31.662032117.03767631.97818117.371127&page_size=20&page_num=0&output=json&ak=PfzqOqhhFIfCsCxAN2uEPP3mrf9QdQtC
#?In[26]:
import?json
import?sys
import?requests??#導入requests庫,這是一個第三方庫,把網頁上的內容爬下來用的
ty=sys.getfilesystemencoding()??#這個可以獲取文件系統的編碼形式
import?time
lat_1=31.662032
lon_1=117.037676
lat_2=31.97818
lon_2=117.371127???#坐標范圍
las=0.2??#給las一個值1
ak=‘PfzqOqhhFIfCsCxAN2uEPP3mrf9QdQtC‘
push=r‘F:\python\zwzwlast.txt‘
#我們把變量都放在前面,后面就不涉及到變量了,如果要爬取別的POI,修改這幾個變量就可以了,不用改代碼了。
print?(time.time())??#相較于python2.7,python3print?需要加括號。
print?(‘開始‘)
urls=[]?#聲明一個數組列表
lat_count=int((lat_2-lat_1)/las+1)
lon_count=int((lon_2-lon_1)/las+1)
for?lat_c?in?range(0lat_count):
????lat_b1=lat_1+las*lat_c
????for?lon_c?in?range(0lon_count):
????????lon_b1=lon_1+las*lon_c
????????for?i?in?range(020):
????????????page_num=str(i)
????????????url=‘http://api.map.baidu.com/place/v2/search?query=小區&?bounds=‘+str(lat_b1)+‘‘+str(lon_b1)+‘‘+str(lat_b1+las)+‘‘+str(lon_b1+las)+‘&page_size=20&page_num=‘+str(page_num)+‘&output=json&ak=‘+ak
????????????urls.append(url)
????????????#print(urls)
#urls.append(url)的意思是,將url添加入urls這個列表中。
f=open(r‘F:\xiaoqu.txt‘‘w‘encoding=‘utf-8‘)
print?(‘url列表讀取完成‘)
for?url?in?urls:
????time.sleep(10)?#為了防止并發量報警,設置了一個10秒的休眠。
????html=requests.get(url)#獲取網頁信息
????data=html.json()#獲取網頁信息的json格式數據
????print(data)
????for?item?in?data[‘results‘]:
????????jname=item[‘name‘]
????????jlat=item[‘location‘][‘lat‘]
????????jlon=item[‘location‘][‘lng‘]
????
評論
共有 條評論