批量下載osm的分區域的osm文件

# coding: utf-8
#!/usr/bin/python

# #### http://www.openstreetmap.org 的分區後的osm數據批量下載工具(須要python的requests和BeautifulSoup包)。
# 從 http://download.geofabrik.de/ 提取網頁中下載鏈接,而後寫入osm-from-geofabrik.txt。  
# 而後能夠批量下載:** wget -c -i osm-from-geofabrik.txt ** ,或者載入其它的下載工具。  
# 
# 或者使用crontab定時下載,編寫一個geofabrik-dl.txt(內容以下,指定晚上11:00,每週一到週五執行)。  
# 而後執行:crontab crontab.txt。
# ```
# 0 23 * * 1-5 wget -c -N -i osm-from-geofabrik.txt
# 0 6 * * 1-5 killall wget
# ```
# 原始數據下載,參考:** http://planet.openstreetmap.org/planet/ **,  最新版本:http://planet.openstreetmap.org/planet/2016/planet-160411.osm.bz2
# 
# ##### by openthings@163.com,http://my.oschina.net/u/2306127/blog

from bs4 import BeautifulSoup as bs
import requests as req
from pprint import *

#獲取網頁內容,常常訪問不到,能夠將地址拷貝到瀏覽器試試。
url = "http://download.geofabrik.de/"
try:
    r = req.get(url)
    print(r)
except Exception as ex:
    print("Error:",ex)

#獲取網頁中的連接列表
bsr = bs(r.text,"html.parser")
alist = bsr.find_all('a')
#pprint(alist)

#另外一種方式獲取網頁中連接的列表。
#bst = [x.extract() for x in bsr.find_all('a')]
#pprint(bst)

#查找列表
flist = open("osm-from-geofabrik.txt","w")

for a in bst:
    #help(a)
    a1 = a.attrs['href']
    if a1.find('.bz2') > 0:
        flist.writelines(a1+"\r\n")
        print(a1)
        
flist.close()
相關文章
相關標籤/搜索