2016-11-08 1 views
0

내가 조작하려는 다운로드 링크에서 URL의 특정 부분을 조작은 다음과 같습니다 :(PYTHON) 사용자의 요청

http://hfrnet.ucsd.edu/thredds/ncss/grid/HFR/USWC/6km/시간별/RTV/HFRADAR, _US_West_Coast, _6km_ 해상도, _Hourly_RTV_best.ncd? VAR = u는 & VAR = V & 북쪽 = 47.20 & 서쪽 = -126.3600 & 전자 AST = -123.8055& 사우스 = 37.2500 & horizStride = 1 = & TIME_START 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