Python 모듈 학습 --- urllib
urllib 모듈 이 제공 하 는 상부 인 터 페 이 스 는 로 컬 파일 을 읽 는 것 처럼 ww 와 ftp 의 데 이 터 를 읽 을 수 있 도록 합 니 다.이 모듈 을 사용 할 때마다 회사 제품 의 클 라 이언 트, 동료 가 C + + 로 웹 에 있 는 그림 을 다운로드 하 는 '고통스러운' 표정 이 떠 오른다.저 는 예전 에 libcurl 튜 토리 얼 을 번역 한 적 이 있 습 니 다. 이것 은 C / C + 환경 에서 비교적 편리 하고 실 용적 인 네트워크 조작 라 이브 러 리 입 니 다. 비교 해 보면... libcurl, Python 의 urllib 모듈 의 사용 문턱 은 훨씬 낮 습 니 다.파 이 썬 을 효율 적 으로 비판 하 는 사람 도 있 을 수 있 습 니 다. 사실은 네트워크 를 조작 하거나 클 러 스 터 에서 상호작용 을 할 때... 언어의 집행 효율 은 결코 병목 이 아니다.이런 상황 에서 가장 좋 은 방법 은 python 을 C / C + + 에 삽입 하여 Python 으로 하여 금 핵심 이 아 닌 논리 적 처 리 를 완성 하 게 하 는 것 이다.또 멀 어 졌 다. 쓸데없는 소리 하지 말고 urllib 여행 을 시작 하 자 ~ ~ (며칠 전에 이 모듈 로 거 미 를 썼어 요. 관심 있 는 친구 들 은 예전 블 로그 에서 코드 를 찾 을 수 있어 요.) 예 를 들 어 Google 홈 페이지 의 html 를 캡 처 하여 콘 솔 에 표시 합 니 다.
#-*- coding=utf-8 -*-
# ,
import urllib
print urllib.urlopen('http://www.google.com').read()
urllib.urlopen(url[, data[, proxies]]) : 원 격 url 을 표시 하 는 클래스 파일 대상 을 만 들 고 로 컬 파일 처럼 이 클래스 파일 대상 을 조작 하여 원 격 데 이 터 를 가 져 옵 니 다.매개 변수 url 은 원 격 데이터 의 경 로 를 표시 하고 보통 인터넷 주소 입 니 다.매개 변수 data 는 post 방식 으로 url 에 제출 한 데 이 터 를 표시 합 니 다.인자 proxies 는 프 록 시 를 설정 하 는 데 사 용 됩 니 다.urlopen 복귀 클래스 파일 대상, 그 는 다음 과 같은 방법 을 제공 했다.
*
read() , readline() , readlines() , fileno() , close() :이 방법 들 의 사용 방식 은 파일 대상 과 완전히 같다.
*
info (): httplib. HTTPMessage 를 되 돌려 줍 니 다. 대상, 원 격 서버 가 돌아 오 는 헤더 정 보 를 표시 합 니 다.
*
getcode (): Http 상태 코드 를 되 돌려 줍 니 다.http 요청 이 라면 200 은 요청 이 성공 적 으로 완료 되 었 음 을 표시 합 니 다.404 는 사이트 주 소 를 찾 을 수 없 음 을 나타 낸다.
*
geturl (): 요청 한 url 을 되 돌려 줍 니 다. 다음은 위의 예 를 확대 하고 관리 가 이 예 를 실행 하여 urllib 에 대한 인상 을 강화 할 수 있 습 니 다.
#-*- coding=utf-8 -*-
import urllib
google = urllib.urlopen('http://www.google.com')
print 'http header:
', google.info()
print 'http status:', google.getcode()
print 'url:', google.geturl()
for line in google: #
print line,
google.close()
urllib.urlretrieve(url[, filename[, reporthook[, data]]]):
url retrieve 방법 은 원 격 데 이 터 를 로 컬 에 직접 다운로드 합 니 다.매개 변수 filename 은 로 컬 에 저장 할 경 로 를 지정 합 니 다 (이 매개 변 수 를 지정 하지 않 으 면 urllib 는 임시 파일 을 생 성하 여 데 이 터 를 저장 합 니 다).매개 변수 reporthook 은 서버 에 연결 되 고 해당 하 는 데이터 블록 전송 이 끝 났 을 때 이 리 셋 을 촉발 하 는 리 셋 함수 입 니 다.우 리 는 이 회신 서 를 이용 할 수 있다. 현재 다운로드 진 도 를 표시 합 니 다. 아래 의 예 는 보 여 줍 니 다.매개 변수 data 는 post 에서 서버 까지 의 데 이 터 를 가리킨다.이 방법 은 두 요 소 를 포함 하 는 원 그룹 (filename, headers), filename 은 로 컬 에 저 장 된 경 로 를 표시 하고 header 는 서버 의 응답 헤드 를 표시 합 니 다.다음은 예 를 들 어 이 방법의 사용 을 보 여 줍 니 다. 이 예 는 시 나 닷 컴 첫 페이지 의 html 를 로 컬 로 캡 처 하여 D: \ sina. html 파일 에 저장 하고 다운로드 진 도 를 표시 합 니 다.
#-*- coding=utf-8 -*-
import urllib
def cbk(a, b, c):
'''
@a:
@b:
@c:
'''
per = 100.0 * a * b / c
if per > 100:
per = 100
print '%.2f%%' % per
url = 'http://www.sina.com.cn'
local = 'd:\\sina.html'
urllib.urlretrieve(url, local, cbk)
위 에서 소개 한 두 가지 방법 은 urllib 에서 가장 자주 사용 하 는 방법 입 니 다. 이 방법 들 은 원 격 데 이 터 를 얻 을 때 내부 에서 URLopener 또는 FancyURLOpener 류.urllib 의 사용자 로 서 우 리 는 이 두 가지 유형 을 거의 사용 하지 않 는 다. 여기 서 나 는 더 이상 말 하고 싶 지 않다.urllib 의 실현 에 관심 이 있다 면, 또는 urllib 가 더 많은 협 의 를 지원 하 기 를 바 라 며 이 두 가 지 를 연구 할 수 있 습 니 다.Python 매 뉴 얼 에서 urllib 의 작 가 는 이 모듈 의 결함 과 부족 을 열거 하여 관심 있 는 학생 들 이 열 수 있 습 니 다. 파 이 썬 매 뉴 얼 알 아 봐.
url lib 에 서 는 url 을 인 코딩 하고 디 코딩 하 는 보조 적 인 방법 도 제공 합 니 다.url 에 특수 한 기호 가 나타 나 면 안 되 고 일부 기 호 는 특수 한 용도 가 있다.get 방식 으로 데 이 터 를 제출 할 때 url 에 key 를 추가 하 는 것 을 알 고 있 습 니 다.
=
value 와 같은 문자열 은 value 에서 허용 되 지 않 습 니 다.
'
=
'
따라서 인 코딩 을 해 야 합 니 다.이와 동시에 서버 가 이 매개 변 수 를 받 았 을 때 디 코딩 을 해서 원시 데이터 로 복원 해 야 한다.이 럴 때 이런 보조 방법 들 은 매우 유용 할 것 이다.
*
urllib.quote(string[, safe]): 문자열 을 인 코딩 합 니 다.인자 safe 는 인 코딩 이 필요 없 는 문 자 를 지정 합 니 다.
*
urllib.unquote(string) :문자열 디 코딩 하기;
*
urllib.quote_plus(string [ , safe ] ) :urllib. quote 와 유사 하지만 이 방법 은
'
+
'
바꾸다
'
'
따옴표
'
%20
'
대신 하 다
'
'
*
urllib.unquote_plus(string ) :문자열 디 코딩 하기;
*
urllib.urlencode(query[, doseq]): dict 또는 두 요 소 를 포함 하 는 원 그룹 목록 을 url 인자 로 변환 합 니 다. 예 를 들 어 사전 {
'
name
'
:
'
dark-bull
'
,
'
age
'
:
200
} 변환
"
name=dark-bull&age=200
"
*
urllib. pathname2url (path): 로 컬 경 로 를 url 경로 로 변환 합 니 다.
*
url lib. url 2 pathname (path): url 경 로 를 로 컬 경로 로 변환 합 니 다. 하나의 예 를 들 어 이 방법 들 을 체험 해 보도 록 하 겠 습 니 다.
~~
:
#-*- coding=utf-8 -*-
import urllib
data = 'name = ~a+3'
data1 = urllib.quote(data)
print data1 # result: name%20%3D%20%7Ea%2B3
print urllib.unquote(data1) # result: name = ~a+3
data2 = urllib.quote_plus(data)
print data2 # result: name+%3D+%7Ea%2B3
print urllib.unquote_plus(data2) # result: name = ~a+3
data3 = urllib.urlencode({ 'name': 'dark-bull', 'age': 200 })
print data3 # result: age=200&name=dark-bull
data4 = urllib.pathname2url(r'd:\a\b\c\23.php')
print data4 # result: ///D|/a/b/c/23.php
print urllib.url2pathname(data4) # result: D:\a\b\c\23.php
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.