2014-02-12 1 views
1

페이지에서 파일을 다운로드 할 수 있도록 공백을 사용하는 웹 페이지 URL을 여는 요청을 보내려고합니다. 일반 브라우저 즉, 주소 표시 줄에 URL을 입력하면 chrome이 자동으로 생성되고 다운로드하라는 메시지가 나타납니다.공백을 추가하여 urllib2 요청을 보내는 방법

대신 웹 브라우저를로드해야 할 때마다 로그 집합을 원한다면 실행할 수있는 파이썬 스크립트를 만들려고 노력하고 있습니다. 그 스크립트는 저를 위해 모든 노력을 다할 것입니다.

예 :

url = http (ip-address)/supportlog.xml/getlogs&name=0335008 04-05-2013 12.46.47.zip 

임 명령을 사용하여 : 나는 다른 우편 번호를 다운로드 할 수 있었다 나는 연결 다음 명령을 사용하고있는 웹 단절에서 좋은 파일을 한

xml_page = opener.open((url)) 

을 코드의 다른 줄.

하지만 나는 공백이 추가 된 URL과 동일한 명령을 시도 할 때.

urllib2는 공백을 모두 제거하므로 구문 오류가 발생합니다. 공백을 포함하지 않는 url을 변경하는 것이 가장 이상적이지만 불가능합니다.

공백을 대체하기 위해 URL을 % 20 (으)로 지정하려고 시도했지만 작동하지 않아 서버가 실패합니다.

urllib.quote 도구를 사용할 수는 있지만 올바른 방법은 무엇인지 또는 확실하지 않은 것으로 알고 있습니다.

아무 도움도 환영합니다 ... 나는 여전히 파이썬을 배우고 있으므로 친절하시기 바랍니다.

답변

2

공백이 같은 urllib.quote를 사용하여 URL을 청소하기 위해서 :

import urllib 
url = urllib.quote("http://www.example.com/a url with whitespaces") 

urllib2.urlopen 같은 기능을 사용할 수있는 파일을 다운로드하려면. urllib 모듈을 사용하여 파일을 다운로드하려면 urllib.urlretrieve이 필요합니다. 그러나 requests은 처음에는 이해하기 쉽습니다.

  • response.text : 웹 사이트의 소스 코드 나 다운로드 한 파일의 내용

    import requests 
    response = requests.get(url) 
    

    response는 몇 가지 유용한 기능을 제공합니다.

  • response.status_code : 요청한 상태 코드입니다. 200 괜찮아.

아마도 다운로드 한 파일을 어딘가에 저장하고 싶을 것입니다. 따라서 open의 파일 연결을 바이너리 모드로 열고 응답 내용을 작성하십시오. 파일을 닫는 것을 잊지 마십시오.

your_file_connection = open('your_file', 'wb') 
your_file_connection.save(response.text) 
your_file_connection.flush() 
your_file_connection.close() 

요약

import urllib 
import requests 

url = urllib.quote("http://www.example.com/a url with whitespaces") 
response = requests.get(url) 

your_file_connection = open('your_file', 'wb') 
your_file_connection.save(response.text) 
your_file_connection. 
your_file_connection.close() 

requests 문서 : your_file_connection.save (response.content)

요구 사항 :이 시도 후, 나는 줄 것을 알아 냈

+0

고마워요! 답변과 관련하여 한 가지 질문 만 있습니다. get 명령을 보내면 다음과 같은 메시지가 표시됩니다. '제공된 스키마가 없습니다. 아마도 http://www.example.com/ URL을 공백으로 사용 하시겠습니까? 유효한 정수가 아닙니다 '. 문서 및 웹 사이트를 잘 보았지만 이음선을 사용하여 도움이 될만한 것을 찾지 못했습니다. 감사합니다. – Jorge

+1

많은 시간과 다량의 커피 후에 나는 해결책을 발견해, 걱정하지 않는다. 관심있는 사람들은 견적 기능이 필요없는 장소의 공백 문자를 추가하고 있다는 것이 문제였습니다. 그 트릭은 전체 URL을 공백과 비 공백으로 분리하는 것이 었습니다. url_main = http://www.exampledomain.com url_lower =/공백 URL 다음 결합 감사 – Jorge

+0

작품을 요청 함수에 넣어! 예외를 제외하고 response.status는 response.status_code 여야하고 response.content는 response.text 여야합니다 (http://docs.python-requests.org/en/latest/에 따라) – Alon

0

다음과 같음 : yo ur_file_connection.write (response.content)

적어도 존의 대답은 다음 올바른 방법 동안 파이썬 2. *

0

에, 당신이 그것을 변경해야 파이썬 3.X에 있습니다 :

import urllib.parse 
url = urllib.parse.quote("http://www.example.com/a url with whitespaces"') 
관련 문제