2016-07-21 2 views
1

웹 페이지에서 파일을 다운로드하고 싶습니다. 그 웹 페이지는 단지 하나의 .zip 파일 만 가지고 있습니다. (다운로드하고자하는 것입니다.) .zip 파일을 클릭하면 다운로드가 시작되지만 URL은 변경되지 않습니다. URL은 여전히 ​​양식 http://ldn2800:8080/id=2800로 남아 있습니다. http://example.com/1.zip 형태의 URL이 없다는 것을 고려하여 어떻게 이것을 파이썬을 사용하여 다운로드 할 수 있습니까?url이 변경되지 않을 때 python을 사용하여 파일을 다운로드하는 방법

또한 페이지 http://ldn2800:8080/id=2800으로 바로 이동하면 페이지가 .zip 파일로 열리고 클릭하지 않고 다운로드되지 않습니다. 어떻게 그것을 파이썬을 사용하여 다운로드합니까?

업데이트 : 그냥 원하는 위치에 압축을 생성하지만 지퍼를 열 수 없습니다와는 아무 상관이없는,

if (str(dict.get('id')) == winID): 
      #or str(dict.get('id')) == linuxID): 
      #if str(dict.get('number')) == buildNo: 
      buildTypeId = dict.get('id') 
      ID = dict.get('id') 
      downloadURL = "http://example:8080/viewType.html?buildId=26009&tab=artifacts&buildTypeId=" + ID 
      directory = BindingsDest + "\\" + buildNo 
      if not os.path.exists(directory): 
       os.makedirs(directory) 

      fileName = None 
      if buildTypeId == linuxID: 
       fileName = linuxLib + "-" + buildNo + ".zip" 
      elif buildTypeId == winID: 
       fileName = winLib + "-" + buildNo + ".zip" 

      if fileName is not None: 
       print(dict) 
       downloadFile(downloadURL, directory, fileName) 

def downloadFile(downloadURL, directory, fileName, user=user, password=password): 
    if user is not None and password is not None: 
     request = requests.get(downloadURL, stream=True, auth=(user, password)) 
    else: 
     request = requests.get(downloadURL, stream=True) 

    with open(directory + "\\" + fileName, 'wb') as handle: 
     for block in request.iter_content(1024): 
      if not block: 
       break 
      handle.write(block) 

을하지만 : 지금은 이런 식으로하고 있어요. 다음과 같이 할 수 있습니까? 웹 페이지에서 파일 이름을 검색 한 다음 일치하는 패턴을 다운로드하는 것과 같습니까?

+0

이 도움이됩니다. http://stackoverflow.com/questions/11002014/downloading-file-with-python-mechanize – bernie

+0

python을 사용하여 요청을 실행 해 보았습니까? 무슨 일이야? –

+0

@ MarcoAcierno 지금 내가하고있는 일을 보여주는 질문을 업데이트했습니다. – Arshad

답변

1

HTTP 상태 코드를 확인하여 오류가 발생하지 않았는지 확인하십시오. 당신은 그렇게 할 내장 방법 raise_for_status을 사용할 수 있습니다 : https://requests.readthedocs.io/en/master/api/#requests.Response.raise_for_status

def downloadFile(downloadURL, directory, fileName, user=user, password=password): 
    if user is not None and password is not None: 
     request = requests.get(downloadURL, stream=True, auth=(user, password)) 
    else: 
     request = requests.get(downloadURL, stream=True) 

    request.raise_for_status() 

    with open(directory + "\\" + fileName, 'wb') as handle: 
     for block in request.iter_content(1024): 
      if not block: 
       break 
      handle.write(block) 

당신이 확실 같은 프록시/FW/등으로 더 네트워킹 문제가 없다고?

편집 : 귀하의 위의 의견에 따르면, 나는 이것이 귀하의 실제 문제에 대한 답변을 확신하지 못합니다. 수정 된 답변 :

zip 파일에 대한 링크가 포함 된 웹 페이지에 액세스합니다. 이 링크는 페이지 자체와 동일합니다. 그러나 브라우저에서 클릭하면 HTML 페이지에 다시 도달하는 대신 파일을 다운로드합니다. 그것은 이상한이지만 다양한 방법으로 설명 할 수 있습니다. 문제를 이해하는 데 도움이되는 전체 HTML 페이지 코드 (zip 파일에 대한 링크 포함)를 복사하여 붙여 넣으십시오.

+0

오류가 발생하지 않았습니다. 그것은 회사 네트워크입니다. 그럴 수 있습니까? – Arshad

+0

회사 네트워크에 인터넷 연결을위한 필수 프록시가있을 수 있습니다. 대상 사이트가 회사 네트워크 또는 외부에서 호스팅됩니까? – Guillaume

+0

회사 네트워크에서 호스팅됩니다. – Arshad

관련 문제