利用python爬取歷代中國行政圖,從先周到中華人民共和國,jpg格式邊框帶經緯度,可自行配準矢量化

古代地圖,對於歷史相關研究人員,是需要的工具,本想找到歷代矢量的歷史地圖數據,但是發現很難有資源,因此只能找到已經公開製圖了jpg數據,如果你有耐心,可以配準後矢量化,獲取歷代矢量數據,不夠工作量浩大。爬取歷代行政區劃圖的步驟如下:

一、首先,找到資源的地址,這裏使用的網站是國學大師網。
利用谷歌瀏覽器,查找爬取地址:
在這裏插入圖片描述
圖上標出的鏈接,即爲圖片在網站服務器存放的地址。只需要利用爬蟲函數下載到本地就行了。

二、獲取網頁前端源代碼,查找a標籤

url = 'http://www.guoxuedashi.com/lsditu/'+str(i)+'/'
html = requests.get(url).text
soup=BeautifulSoup(html,'html.parser')
a=soup.select('a')

這裏是將html代碼全部copy下來,然後轉換格式,找到html代碼中a標籤中內容,我們需要的網址就在a標籤中

三、遍歷a標籤,找到我們需要的那個網址

for i in a:
   aObj = re.match(r"http://pic.guoxuedashi.com/lsditu/", i['href'])
   if aObj:
      url = i['href']

這裏使用 re.match匹配網址鏈接,如果是http://pic.guoxuedashi.com/lsditu/開頭的,則獲取這個,即我們需要的那個

四、這裏拼接文件夾地址以及文件名,將jpg寫入該文件夾

name = url.split('/')
#print(name[4])
r = requests.get(i['href'])
os.makedirs('./image/'+name[4]+'/', exist_ok=True)
#DOWNLOAD_DELAY = 3
with open('./image/'+name[4]+'/'+name[5]+'.png', 'wb') as f:
   f.write(r.content)
   print(name[5]+'.png')

其中核心在於 f.write(r.content),即將jpg圖片寫入拼接好的文件夾路徑

五、注意網站的反爬蟲機制

socket.setdefaulttimeout(20)  # 設置socket層的超時時間爲20秒
r.close()
time.sleep(2)

上面第一個爲設置超時時間,第二個爲關閉請求,每次爬取一次結束後關閉,第三個爲設置睡眠時間,這樣能降低服務器對於爬蟲的應激反應。

爬取的效果如下:

在這裏插入圖片描述
共1.3個G,局部細節如下,以我喜歡的北宋地圖爲例:

在這裏插入圖片描述
在這裏插入圖片描述
所有數據我已經打包好,網盤地址:
鏈接:https://pan.baidu.com/s/1v8PgeKTfe5ExXRF8QN6Xpw
提取碼:niq1

關注微信公衆號:python趣味愛好者,後臺回覆:歷代行政圖,可以獲取該完整源代碼文件。
二維碼如下:
在這裏插入圖片描述

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