日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

爬虫python代码广告_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)...

發布時間:2024/9/27 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫python代码广告_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我是怎么想的,在新浪博客里寫代碼教程。

這篇博客的內容同步到了CSND博客中,那里不限制外鏈,也可以復制代碼。

http://blog.csdn.net/sinat_41310868/article/details/78746224

好,現在進入高階代碼篇。

目的:

爬取昆明市中學的興趣點POI。

關鍵詞:中學

已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

昆明市坐標范圍:

左下角:24.390894,102.174112

右上角:26.548645,103.678942

URL模板:

http://api.ma/place/v2/search?query=中學&

bounds=24.390894,102.174112,26.548645,103.678942&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

工具:python2.7

我們將使用python語言來寫爬蟲代碼。

1.功能分解

先把這個爬蟲要實現的功能做一個分解。

已經知道在這個URL中,變量是bounds和page_num的值。

Bounds范圍值要采取矩形分割,分4個矩形,就是4組坐標范圍,page_num的值從0到19之間。

1組坐標范圍20個page_num值,4×20=80。要生成的URL陣列是80個。

每個URL都能生成一個網頁,每個網頁上的信息都要被爬下來,保存到一個txt文件中。

A.根據bounds和page_num組合生成URL。

B.根據URL爬取網頁數據,添加到txt文件中。

這將是一個循環代碼:

Bounds=[矩形1,矩形2,矩形3,矩形4]

Page_nums=[0、1、2……19]

For 矩形 in bounds:

For page_num in

page_nums:

URL=http://api.ma/place/v2/search?query=中學&

bounds=矩形&page_size=20&page_num=page_num&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

URL內容爬取,添加入txt文件

Next

Next

End

這個代碼的框架說完了。

然后進入每個功能的代碼如何實現環節。

2.功能代碼實現。

代碼要實現的功能是哪幾個呢?

按照步驟分:

A.bounds列表的生成。

B.URL列表的生成。

C.爬取的網頁內容保存到txt文本中。

(1)bounds列表生成

再說一下,因為這個是零基礎教程,所以我會講解得非常細致,python代碼會由淺入深,從最簡單最基礎的開始。

我們看一下坐標范圍:

左下角:24.390894,102.174112

右上角:26.548645,103.678942

緯度差是2.157751,經度差是1.50483。

用代碼表示一下坐標范圍:

lat_1=24.390894

lon_1=102.174112

lat_2=26.548645

lon_2=103.678942

lat是緯度的英文,lon是經度的英文。

我們切分矩形的話,這個矩形的坐標肯定是由上面這幾個坐標范圍計算的來的,內插運算。

為了計算簡便,我們就切方形吧,這個方形的邊長我們設定一個值,假設是las(length of a

side,邊長英文)。

那么第一個矩形的左下角坐標是lat_1+las,lon_1,右上角坐標是lat_1+las*2,lon_1+las;第二個矩形的左下角坐標是lat_1+las,lon_1+las,右上角坐標是lat_1+las*2,lon_1+las*2……

我們設定的計算規則是:

整個坐標范圍的大矩形我們叫它矩形A,切分的小矩形我們叫它矩形B。

矩形A的左下角坐標是:lat_1,lon_1,右上角坐標是lat_2,lon_2;

矩形B的邊長是las。

那么計算一下矩形B的數量:

(int((lat_2-lat_1)/las)+1)*(int((lon_2-lon_1)/las)+1)

int是一個取整函數。

int(1.334)=1

int((lat_2-lat_1)/las)+1計算的是在緯度上切了幾個,int((lon_2-lon_1)/las)+1計算的是在經度上切了幾個,乘積就是一共幾個矩形。

我們看下面一段代碼:

lat_1=24.390894

lon_1=102.174112

lat_2=26.548645

lon_2=103.678942 #坐標范圍

las=1 #給las一個值1

lat_count=int((lat_2-lat_1)/las+1)

lon_count=int((lon_2-lon_1)/las+1)

for lat_c in range(0,lat_count):

lat_b1=lat_1+las*lat_c

for lon_c in

range(0,lon_count):

lon_b1=lon_1+las*lon_c

print str(lat_b1)+','+str(lon_b1)

#這段代碼生成的是矩形B的左下角坐標

在IDLE中敲入這些代碼,運行結果是:

24.390894,102.174112

24.390894,103.174112

25.390894,102.174112

25.390894,103.174112

26.390894,102.174112

26.390894,103.174112

因為我把las設置為1了,所以切出來6個矩形,這是這六個矩形的左下角坐標。

這行代碼很簡單,只涉及到兩組內嵌的循環語句:for lat_c in range(0,lat_count):

用VB語言翻譯一下這行就是 for lat_c=0 to lat_count step 1。

說明幾個注意點:

a.python語言不需要聲明變量。

b.for語句后面的:別忘了。

c.range(0,3)是[0,1,2],3不在數組里面,好好理解一下函數關系,這么個算法,說明左下角坐標是正好的,不會多一個。

d.python沒有結束循環的語句,靠回車,表示嵌套關系靠的“ ”,四個空格,for語句冒號后面跟著的那行,比for語句后退了四個空格,說明這個語句是在for循環中的,如果語句要跳出for循環的話,那么就刪掉四個空格,表示跳出循環。這是一個很有意思的python寫碼規則。

我們把這段代碼改一改,獲取矩形B的范圍坐標:

lat_1=24.390894

lon_1=102.174112

lat_2=26.548645

lon_2=103.678942 #坐標范圍

las=1 #給las一個值1

lat_count=int((lat_2-lat_1)/las+1)

lon_count=int((lon_2-lon_1)/las+1)

for lat_c in range(0,lat_count):

lat_b1=lat_1+las*lat_c

for lon_c in

range(0,lon_count):

lon_b1=lon_1+las*lon_c

print

str(lat_b1)+','+str(lon_b1)+','+str(lat_b1+las)+','+str(lon_b1+las)

#這段代碼生成的是矩形B的范圍坐標

運行結果如下:

24.390894,102.174112,25.390894,103.174112

24.390894,103.174112,25.390894,104.174112

25.390894,102.174112,26.390894,103.174112

25.390894,103.174112,26.390894,104.174112

26.390894,102.174112,27.390894,103.174112

26.390894,103.174112,27.390894,104.174112

好好理解一下這行代碼。

(2)URL列表生成:

bounds列表生成之后,page_num在range(0,20)中遍歷一遍,就生成了URL列表了。

代碼如下:

看看這張圖,好好理解一下循環與空格之間的關系,python沒有結束循環的語句,就靠空格來做嵌套。

把這段代碼完善一下,主要是URL那段怎么寫。

其中:

url='http://api.ma/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=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO'

print

url

URL列表也生成了,是不是曙光在望了?

繼續!

(3)網頁解析

我們先學習一下網頁的爬取,依然用這行URL來學習。

http://api.ma/place/v2/search?query=中學&

bounds=24.390894,102.174112,26.548645,103.678942&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

我用的python2.7,我們寫一段代碼,把這個URL上的數據爬下來。

打開IDLE,file——new file(ctrl+n),新建一個py文件,在里面敲代碼。當然也可以在python

shell里面一行一行敲,對于初學者來說,這種方式比較合適,一行一行敲,錯了就有提示。

我們簡單敲入一段代碼,看看怎么爬取網頁:

在代碼的最開始,我們看到導入了兩個庫,一個是urllib2庫,一個是json,這是要解析百度開放平臺URL必須要導入的兩個庫,urllib2是做網頁解析的,而URL中,我們仔細查看,會看到“output=json”,URL的網頁輸出是以這種格式輸出的。

輸出結果如下:

但顯然,我們不需要這樣的數據,在結果“results”中,我們只需要name、lat、lng、address的值,這時候,就需要對json數據格式進行解析了。

我們把這段代碼修改一下:

與上文不同的是,我們還導入了一個sys庫,解釋如圖。

用加載的方式,json.load(response)在python中載入了URL生成的json數據,用一個循環讀入了json數據中的results中name,仔細觀察json數據結構就能理解這些代碼。

運行結果如下:

當然,我們要獲取的是四個值,name、lat、lng、address,那么把這行代碼改寫一下吧!

改寫的代碼部分如下:

for item in data['results']:

jname=item['name']

jlat=item['location']['lat']

jlon=item['location']['lng']

jadd=item['address']

(5)python默認編碼問題。

python默認的編碼是ASCII,不過URL解析的json文件編碼是uft-8。

如果不對編碼方式進行重新設定,就會出現中文亂碼問題。

把python默認編碼從ascii轉到uft-8的代碼是固定的。

# -*- coding:utf-8 -*

import os

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

把這段代碼放在代碼前端即可。

我們將要實現的代碼前端如圖,保證代碼行的順序。

(6)txt文件寫入

f=open(r'D:\python\kunmingschool.txt','a')

f.write('zhongxue')

f.close()

這是一段最簡單的文本寫入代碼,打開D:\python\kunmingschool.txt這個文件,以添加方式寫入,寫入zhongxue,把文件關閉。

A.文件全路徑前面加一個r,這是防止字符轉譯的,就是怕識別不了路徑。

B.a的意思是以添加方式寫入,如果是w的話,就是覆蓋方式寫入。

C.寫入完成后,要把文件關閉,close(),括號別忘了。

把網頁解析和txt文件寫入,聯合一下。

還是把這個URL上的內容寫入txt文件,文件的全路徑是D:\python\kunmingschool.txt。

http://api.ma/place/v2/search?query=中學&

bounds=24.390894,102.174112,26.548645,103.678942&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

這段的代碼如下:

n\是python里面的換行符。

運行結果如下圖:

至此,要用到的功能代碼,我們都會了,現在只要把它們都組合到一切就可以了。

3.全部代碼

# -*- coding:utf-8 -*

import json #導入json庫

import os

import urllib2 #導入urllib2庫

import sys #我知道了,這個東東是為了把默認編碼從ascii轉到uft-8。

reload(sys)

sys.setdefaultencoding('utf-8')

lat_1=24.390894

lon_1=102.174112

lat_2=26.548645

lon_2=103.678942 #坐標范圍

las=1 #給las一個值1

ak='9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO'

keyword='中學'

push=r'D:\python\12345.txt'

#我們把變量都放在前面,后面就不涉及到變量了,如果要爬取別的POI,修改這幾個變量就可以了,不用改代碼了。

f=open(push,'a')

lat_count=int((lat_2-lat_1)/las+1)

lon_count=int((lon_2-lon_1)/las+1)

for lat_c in range(0,lat_count):

lat_b1=lat_1+las*lat_c

for lon_c in

range(0,lon_count):

lon_b1=lon_1+las*lon_c

for i in range(0,20):

page_num=str(i)

url='http://api.ma/place/v2/search?query='keyword'&

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

response =

urllib2.urlopen(url2)

data=json.load(response)

for item

in data['results']:

jname=item['name']

jlat=item['location']['lat']

jlon=item['location']['lng']

jadd=item['address']

j_str=jname+','+str(jlat)+','+str(jlon)+','+jadd+'\n'

f.write(j_str)

f.close()

說實話,一個腳本里面嵌入了四個循環,程序員見了能打人,不過能用就行。

接下來將要進入進階篇教程,在這里會涉及到如何獲取區域范圍,例如昆明市的bounds值;如何更合理的切分矩形;如何簡化代碼,如何將代碼移植到python3中;可否用別的方式、函數語句獲取poi數據;通過什么樣的設置可以更高效的獲取poi;python中文亂碼的解決方式;request、time等模塊的應用;過程參考資料匯總……

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的爬虫python代码广告_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美人在线 | 91日本精品 | sao浪受的饥渴日常 91免费入口 | 中文字幕日韩精品亚洲一区小树林 | 亚洲精品福利 | 日韩伊人网 | 成都电影免费大全 | 香蕉在线视频播放 | 潘金莲一级淫片aaaaa | 国产91香蕉 | 天天综合网国产 | 亚洲人精品| 亚洲福利视频在线 | 婷婷国产视频 | 一级片自拍| 高潮av在线 | 奇米影视9999 | 亚洲精品精品 | 天堂а在线中文在线新版 | 亚洲美女性生活视频 | 亚洲美女视频在线 | 在线看日本 | 亚洲精品国产一区二 | 黑人精品xxx一区一二区 | 欧美一区二区三区四区视频 | 激情三区 | 国产成人精品在线播放 | 国产91丝袜在线播放0 | 精品肉丝脚一区二区三区 | 久久这里只有精品8 | 污视频网站在线观看 | 亚洲天堂精品一区 | 黄色片视频免费 | 奇米影视7777 | av资源免费看 | 亚洲国产精品美女 | 720url在线观看免费版 | 97se在线视频 | 亚洲黄网av| 国产视频在线看 | 青青成人网 | 亚洲男人天堂网站 | 精品国产一区在线观看 | 少妇精品偷拍高潮白浆 | 桃花久久 | 亚洲综合视频网 | 日韩成人av网站 | 欧日韩一区二区三区 | 国产毛片3 | 国产ts变态重口人妖hd | 手机看片一区二区 | 不卡的av电影 | 一区二区日本视频 | 日韩精品短片 | 黄色一级片欧美 | 国产美女一级视频 | 色多多视频网站 | 国产午夜福利100集发布 | 婷婷国产视频 | 91av国产在线 | 好色婷婷| 无码aⅴ精品一区二区三区浪潮 | 日本久色 | 欧美男女交配 | 综合狠狠| 热99| 91精品视频在线免费观看 | 国产精品午夜一区二区 | 在线观看污视频网站 | 最新国产在线 | 一级作爱视频 | 日本在线成人 | 婷婷四房综合激情五月 | 精品久久国产视频 | 僵尸叔叔在线观看国语高清免费观看 | 激情视频在线播放 | 欧美黄色一级 | xxxxx色| 国产午夜精品一区二区三区四区 | 伊人成人久久 | 中文字幕一区二区三区在线视频 | 天天撸天天射 | 台湾佬av| 国产乱人视频 | аⅴ天堂中文在线网 | 成人国产一区二区三区精品麻豆 | 色综合一区 | 欧美亚洲日本一区 | 日本天堂免费 | www.色午夜.com | 国产一区二区视频免费观看 | 中文字幕在线视频一区二区 | 婷婷6月天| 性欧美视频在线观看 | 97人妻天天摸天天爽天天 | 浮力影院国产第一页 | 天天干天天做 | 美女少妇av | 免费在线观看a级片 |