Python下载拼接地图

地图概览

   要下载的地图 大清一统天下全图,如下:


地图图片URL分析

   通过抓取图片URL可知:该地图一共切分成了52行,30列个小图

下载每一个切图

代码:

#encoding: utf-8

import os
import urllib.request
import urllib.parse
import time
'''
下载地图的各部分小图
'''
start = time.time()
print('开始时间:' + str(start))

header_dict = {
'Host': 'lbezone.ust.hk',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0',
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Referer': 'http://lbezone.ust.hk/rse/wp-content/plugins/wp-imagezoom/zoom.php?id=ZvltF',
'Connection': 'keep-alive',
}

#下载后的图片保存到的路径
filePath = 'D:\\大清地图\\'
#http://lbezone.ust.hk/rse/wp-content/plugins/wp-imagezoom/work/http_cln__sls__sls_lbezone.ust.hk_sls_obj_sls_2_sls_o_sls_b626740_sls_b626740.jpg/div0-0-29.jpg
#地图地址前缀
url='http://lbezone.ust.hk/rse/wp-content/plugins/wp-imagezoom/work/http_cln__sls__sls_lbezone.ust.hk_sls_obj_sls_2_sls_o_sls_b626740_sls_b626740.jpg/'
#总行数-1
pages = 51
#总列数-1
fileNum = 29
#当前行数,从0开始
i = 0


while i <= pages:
    j = 0
    print('第' + str(i) + '页开始下载================================')

    while j<= fileNum:
        try:
            fileName = 'div0-' + str(i) + '-' + str(j) + '.jpg'
            print('fileName=' + fileName)
            request = urllib.request.Request(url=(url + fileName), headers=header_dict)
            response = urllib.request.urlopen(request)
            res = response.read()
            #print(res)
            #print(type(res))

        except BaseException:
            print('第' + str(i) + '-' + str(j) + '页下载失败\n=======================================')
        else:
            # 带路径的文件
            filename =  filePath + str(i) + '\\' + fileName
            # 将文件路径分割出来
            file_dir = os.path.split(filename)[0]
            # 判断文件路径是否存在,如果不存在,则创建,此处是创建多级目录
            if not os.path.isdir(file_dir):
                os.makedirs(file_dir)

            with open(filename, 'wb') as f:
                f.write(res)
            f.close()
            print('第'+ str(i) + '-' + str(j) + '页下载结束\n=======================================')
            j += 1
            time.sleep(2)

    i += 1

end = time.time()
print('结束时间:' + str(end))

print('执行用时:' + str(end - start) + 's')


下载完成:


切图拼接成地图

把所有的切图拼接成一个完整的地图主要用到了PIL库,图片较多拼接过程有点长,最后地图近500M,拼接核心代码:

#每行合并完后接着合并下一行
def mergeRowThenCol(files,width,height,toImage,rowNum):
    print('第'+ str(rowNum) + '行files=' + repr(files))
    for i in range(0, len(files)):
        file = files[i]
        pic_fole_head = Image.open(file)
       # width, height = pic_fole_head.size
        # print('width=' + str(width))
        # print('height=' + str(height))
        loc = (i * width, rowNum * height)
        print(loc)
        print('第'+ str(rowNum) +'行,第' + str(i) + "列存放位置" + str(loc))
        toImage.paste(pic_fole_head, loc)

    return toImage

最终结果

全图:



局部:





到此完成,改天有时间再把代码放到GitHub上。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值