2016-11-08 7 views
0

私が操作したいダウンロードリンクでURLの特定の部分を操作するには、以下の通りです:(PYTHON)ユーザの要求

http://hfrnet.ucsd.edu/thredds/ncss/grid/HFR/USWC/6キロ /時給/ RTV/HFRADAR、_US_West_Coast_6km_解像度、_Hourly_RTV_best.ncd?VAR = U & VAR = &北V = 47.20 &西= -126.3600 & E AST = -123.8055 &南= 37.2500 & horizStride = 1 &時間_ = 2015年11月1日 T00の%3A00%3A00Z & TIME_END = 2015年11月3日 T14の%3A00%3A00Z & timeStride = 1 & addLatLon =真&は=のNetCDF

を受け入れ、私は大胆な変数であります何かを作りたいので、私は、彼らが望むものを調整し、データセットをユーザーに尋ねることができます。このようにして、このスクリプトを使用して異なるデータセットをダウンロードできます。同じ変数を使用して、ダウンロードした新しいファイルの名前をUSWC6km20151101-20151103にしたいと思います。

私はいくつかの調査を行い、urllib.parseとurllib2を使用できることを知りましたが、それらを試してみると「urllib.parse」というモジュールはありません。

私は、ファイルをダウンロードするために)(webbrowser.openを使用することができますが、URLを操作する

ありがとう私に問題を与えています!

+0

そのリンクを持つブラウザウィンドウを開くか、そのリンクポイントをダウンロードして保存しますか? – mx0

+0

あなたが指定した仕様に応じてリンクが自動的にデータのダウンロードを開始します。だから、基本的にはこれをプログラムのベースリンクにして、太字の部分を変更できるようにしたいので、私は別のデータセットを得ることができます。ユーザーは、北、西、東、南の数字と他の太字の部分をリンクに入力するだけでダウンロードが開始されます。 – EagleTamer

答えて

0

urllibの代わりにrequestsのコンテンツをダウンロードするモジュールを簡単に使用できます。実際の作業を行う部分はわずか4行です。

# first install this module 
import requests 

# parameters to change 
location = { 
    'part': 'USWC', 
    'part2': '_US_West_Coast', 
    'km': '6km', 
    'north': '45.0000', 
    'west': '-120.0000', 
    'east': '-119.5000', 
    'south': '44.5000', 
    'start': '2016-10-01', 
    'end': '2016-10-02' 
} 

# this is template for .format() method to generate links (very naive method) 
link_template = "http://hfrnet.ucsd.edu/thredds/ncss/grid/HFR/{part}/{km}/hourly/RTV/\ 
HFRADAR,{part2},_{km}_Resolution,_Hourly_RTV_best.ncd?var=u&var=v&\ 
north={north}&west={west}&east={east}&south={south}&horizStride=1&\ 
time_start={start}T00:00:00Z&time_end={end}T16:00:00Z&timeStride=1&addLatLon=true&accept=netcdf" 

# some debug info 
link = link_template.format(**location) 
file_name = location['part'] + location['km'] + location['start'].replace('-', '') + '-' + location['end'].replace('-', '') 
print("Link: ", link) 
print("Filename: ", file_name) 

# try to open webpage 
response = requests.get(link) 
if response.ok: 
    # open file for writing in binary mode 
    with open(file_name, mode='wb') as file_out: 
     # write response to file 
     file_out.write(response.content) 

おそらく次のステップは、ロケーションdictsを含むリストのループでこれを実行することになります。あるいは、csvファイルから場所を読むこともできます。

+0

これは私に多くの助けになります!私はリクエストが何をしているのかと疑問に思っていました。もしそれが意味するのであれば、ブラウザを開いてダウンロードを開始する必要はありません。 – EagleTamer