利用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趣味爱好者,后台回复:历代行政图,可以获取该完整源代码文件。
二维码如下:
在这里插入图片描述

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