Python爬蟲之小試牛刀——使用Python抓取百度街景圖像

之前用.Net做過一些自動化爬蟲程序,聽大牛們說使用python來寫爬蟲更便捷,按捺不住抽空試了一把,使用Python抓取百度街景影像。

這兩天,武漢迎來了一個德國總理默克爾這位大人物,又刷了一把武漢長江大橋,今天就以武漢長江大橋爲例,使用Python抓取該位置的街景影像。

百度街景URL分析

基於http抓包工具,可以很輕鬆的獲取到瀏覽百度街景時的http請求數據。如下圖所示,即是長江大橋某位置點街景影像切片:

該切片對應的URL請求爲:

細緻分析該URL請求,並經過模擬測試,可以總結出如下初步結論

請求影像切片所需的幾個關鍵參數分別爲:

① sid:代表某個具體的街景點位;

② pos:代表該切片在完整的全景影像圖上的切片座標;

③ z:代表街景影像切片級別。

單個位置的街景影像圖可以生產出多種級別的切片,不同的級別下,切片的數量是不同的;切片的座標使用行號、列號予以區分。

明確了以上百度街景影像的切片規則,就可以用代碼開擼了。

Python源碼

要求:一次性抓取連續10個全景點的所有級別切片信息。

源碼如下:

import urllib2
import threading
from optparse import OptionParser
# from bs4 import BeautifulSoup
import sys
import re
import urlparse
import Queue
import hashlib
import os
 
def download(url, path, name):
    conn = urllib2.urlopen(url)
    if not os.path.exists(path):
        os.makedirs(path)
    f = open(path + name, 'wb')
    f.write(conn.read())
    f.close()

fp = open("E:\\Workspaces\\Python\\panolist.txt", "r")
for line in fp.readlines():
    line =  (lambda x: x[1:-2])(line)
    # url = line
    for zoom in range(1, 6):
        row_max = 0
        col_max = 0
        row_max = pow(2, zoom - 2) if zoom > 1 else 1
        col_max = pow(2, zoom - 1)
        for row in range(row_max):
            for col in range(col_max):
                z = str(zoom)
                y = str(row)
                x = str(col)
                print(y + "_" + x)
                url = line + "&pos=" + y + "_" + x + "&z=" + z
                path = "E:\\Workspaces\\Python\\pano\\" + url.split('&')[1].split('=')[1] + "\\" + z + "\\"
                name = y + "_" + x + ".jpg"
                print url
                print name
                download(url, path, name)
fp.close()

抓取結果如下,按上述分析的規則進行本地化存儲,可以看到各級別下,所有的切片拼接起來,剛好是一張完整的全景圖。

小結

① Python這門語言真的是蠻便捷,安裝和配置都十分方便,也有很多IDE都支持,我初次使用,遇上問題就隨手查Python語言手冊,基本上半天完成該代碼示例。

② 在爬蟲程序方面,Python相關資源十分豐富,是爬蟲開發的一把利器。

上述代碼簡要的實現了批量抓取百度街景影像切片數據,大量使用的話,建議繼續處理一下,加上模擬瀏覽器訪問的處理,否則很容易被服務方直接偵測到來自網絡爬蟲的資源請求,而導致封堵。

 

附 python爬蟲入門(一)urllib和urllib2 https://www.cnblogs.com/derek1184405959/p/8448875.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章