Python 파충류 중 urllib 3 와 urllib 의 차 이 는 무엇 입 니까?
urllib 는 네트워크 요청 을 처리 하 는 python 표준 라 이브 러 리 로 4 개의 모듈 을 포함 합 니 다.
request 모듈 은 주로 네트워크 요청 을 구성 하고 시작 하 며 Headers,Proxy 등 을 추가 합 니 다.이 를 이용 하면 브 라 우 저의 요청 시작 과정 을 모 의 할 수 있 습 니 다.
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
urlopen 은 네트워크 요청 을 간단하게 보 내 는 방법 입 니 다.문자열 형식의 url 을 받 습 니 다.들 어 오 는 url 에 네트워크 요청 을 보 내 고 결 과 를 되 돌려 줍 니 다.
먼저 간단 한 예 를 하나 쓰 시 오.
from urllib import request
response = request.urlopen(url='http://www.httpbin.org/get')
print(response.read().decode())
urlopen 은 기본적으로 get 요청 을 보 내 고 data 인자 가 들 어 올 때 POST 요청 을 합 니 다.data 매개 변 수 는 바이트 형식,클래스 파일 대상 또는 교체 가능 한 대상 입 니 다.
from urllib import request
response = request.urlopen(url='http://www.httpbin.org/post',
data=b'username=q123&password=123')
print(response.read().decode())
시간 초 과 를 설정 할 수 있 으 며,설정 시간 초 과 를 요청 하면 이상 을 던 집 니 다.timeout 이 지정 되 지 않 으 면 시스템 기본 설정 을 사용 합 니 다.timeout 은 http,https,ftp 연결 에 만 작 동 합 니 다.그것 은 초 단위 로,예 를 들 어 timeout=0.1 시간 초과 시간 을 0.1 초 로 설정 할 수 있다.
from urllib import request
response = request.urlopen(url='https://www.baidu.com/',timeout=0.1)
요청 대상openurl 을 이용 하여 가장 기본 적 인 요 구 를 할 수 있 지만 이 간단 한 매개 변 수 는 완전한 요 구 를 구축 하기 에는 부족 하고 더욱 강력 한 Request 대상 을 이용 하여 더욱 완전한 요 구 를 구축 할 수 있 습 니 다.
1.요청 헤더 추가
urllib 를 통 해 보 내 는 요청 은 기본 Headers:"User-agent":"Python-urllib/3.6"이 있 습 니 다.요청 은 urllib 에서 보 냈 습 니 다.그래서 User-agent 를 검증 하 는 사 이 트 를 만 났 을 때 Headers 를 사용자 정의 하여 자신 을 위장 해 야 합 니 다.
from urllib import request
headers ={
'Referer': 'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=baidu&wd=python%20urllib%E5%BA%93&oq=python%2520urllib%25E5%25BA%2593&rsv_pq=947af0af001c94d0&rsv_t=66135egC273yN5Uj589q%2FvA844PvH9087sbPe9ZJsjA8JA10Z2b3%2BtWMpwo&rqlang=cn&rsv_enter=0&prefixsug=python%2520urllib%25E5%25BA%2593&rsp=0',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
response = request.Request(url='https://www.baidu.com/',headers=headers)
response = request.urlopen(response)
print(response.read().decode())
2.쿠키 조작파충 류 를 개발 하 는 과정 에서 쿠키 에 대한 처리 가 매우 중요 합 니 다.urllib 의 쿠키 처 리 는 다음 과 같은 사례 입 니 다.
from urllib import request
from http import cookiejar
# cookie
cookie = cookiejar.CookieJar()
# cookie
cookies = request.HTTPCookieProcessor(cookie)
# , opener
opener = request.build_opener(cookies)
# opener
res =opener.open('https://www.baidu.com/')
print(cookies.cookiejar)
3.프 록 시 설정파충 류 를 실행 할 때 IP 가 차단 되 는 경우 가 많 습 니 다.이 럴 때 우 리 는 ip 대 리 를 사용 하여 처리 해 야 합 니 다.urllib 의 IP 대 리 는 다음 과 같 습 니 다.
from urllib import request
url ='http://httpbin.org/ip'
#
proxy ={'http':'172.0.0.1:3128'}
#
proxies =request.ProxyBasicAuthHandler(proxy)
# opener
opener = request.build_opener(proxies)
res =opener.open(url)
print(res.read().decode())
urlib 라 이브 러 리 의 클래스 나 방법 은 네트워크 요청 을 보 낸 후에 urllib.response 의 대상 을 되 돌려 줍 니 다.그것 은 돌아 와 달라 고 요청 한 데이터 결 과 를 포함 하고 있다.그것 은 우리 가 되 돌아 오 는 결 과 를 처리 할 수 있 도록 속성 과 방법 을 포함 하고 있다.parse.urlencode()는 요청 을 보 낼 때 많은 인 자 를 전달 해 야 합 니 다.문자열 로 연결 하면 번 거 로 울 수 있 습 니 다.parse.urlencode()방법 은 url 인 자 를 연결 하 는 것 입 니 다.
from urllib import parse
params = {'wd':' ', 'code':1, 'height':188}
res = parse.urlencode(params)
print(res)
인쇄 결 과 는 wd=%E6%B5%8B%E8%AF%95&code=1&height=188parse.parse 를 통 해서 도 가능 합 니 다.qs()방법
print(parse.parse_qs('wd=%E6%B5%8B%E8%AF%95&code=1&height=188'))
urllib.error 모듈error 모듈 은 주로 이상 처 리 를 담당 합 니 다.요청 에 오류 가 발생 하면 error 모듈 로 처리 할 수 있 습 니 다.주로 URLError 와 HTTPError 를 포함 합 니 다.
URLError:error 이상 모듈 의 기본 클래스 입 니 다.request 모듈 에서 발생 하 는 이상 은 모두 이 클래스 로 처리 할 수 있 습 니 다.
HTTPError:URLError 의 하위 클래스 로 세 가지 속성 을 포함 합 니 다.
from urllib import request,error
try:
response = request.urlopen("http://pythonsite.com/1111.html")
except error.HTTPError as e:
print(e.reason)
print(e.code)
print(e.headers)
except error.URLError as e:
print(e.reason)
else:
print("reqeust successfully")
urllib.robotparse 모듈 robotparse 모듈 은 주로 파충류 프로 토 콜 파일,robots.txt.의 해석 을 책임 집 니 다.
로봇 프로 토 콜(파충류 프로 토 콜,로봇 프로 토 콜 등 이 라 고도 함)의 전 칭 은'인터넷 파충류 배제 기준'(Robots Exclusion Protocol)으로,웹 사 이 트 는 로봇 프로 토 콜 을 통 해 검색엔진 에 어떤 페이지 를 캡 처 할 수 있 는 지,어떤 페이지 를 캡 처 할 수 없 는 지 알려 준다.
네트워크 라 이브 러 리 urllib 3
urllib 3 는 urllib 라 이브 러 리 보다 더 강 한 존재 로 현재 많은 원생 시스템 이 urllib 3 를 사용 하기 시작 했다.
urllib 3 는 다음 과 같은 장점 을 가지 고 있다.
pip install urllib3
#
conda install urllib3
다음은 urllib 3 라 이브 러 리 의 사용 방식 을 설명 하 겠 습 니 다.네트워크 요청
GET 요청
우선,우리 가 urllib 3 라 이브 러 리 를 사용 하여 네트워크 요청 을 할 때 PoolManager 류 의 인 스 턴 스 를 만들어 야 합 니 다.이 종 류 는 스 레 드 탱크 를 관리 하 는 데 사 용 됩 니 다.
다음은 urllib 를 통 해 바 이 두 를 방문 하고 조회 결 과 를 되 돌려 드 리 겠 습 니 다.예 는 다음 과 같 습 니 다.
import urllib3
http = urllib3.PoolManager()
url = 'http://www.baidu.com/s'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = http.request('GET', url, fields={'wd': ' '}, headers=headers)
result = response.data.decode('UTF-8')
print(result)
실행 후 효 과 는 다음 과 같 습 니 다.여기에서 우 리 는 fields 매개 변 수 를 통 해 GET 의 요청 필드 를 지정 합 니 다.그러나 여기 서 먼저 요청 헤드 를 설 명 했 는데 사실은 바 이 두 에 안전 메커니즘 이 있 기 때문에 독자 들 은 headers 파 라미 터 를 제거 해 볼 수 있다.바 이 두 의 보안 인증 페이지 로 돌아 갑 니 다.
POST 요청
서버 에 폼 이나 복잡 한 데 이 터 를 제출 하려 면 POST 요청 에 사용 해 야 합 니 다.POST 요청 은 간단 합 니 다.요청 한 첫 번 째 매개 변 수 를'POST'로 바 꾸 기만 하면 됩 니 다.
예 는 다음 과 같다.
import urllib3
http = urllib3.PoolManager()
url = 'http://httpbin.org/post'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = http.request('POST', url, fields={'username': 'name', 'age': '123456'}, headers=headers)
result = response.data.decode('UTF-8')
print(result)
실행 후 다음 데 이 터 를 되 돌려 줍 니 다:HTTP 응답 헤더
urllib 3 라 이브 러 리 를 사용 하여 네트워크 에 접근 할 때 돌아 오 는 HTTP Response 입 니 다.기본적으로 가지 고 있 는 인자 중 에는 info 방법 이 포함 되 어 있 습 니 다.응답 헤더 데 이 터 를 되 돌려 줍 니 다.예 는 다음 과 같 습 니 다.
import urllib3
http = urllib3.PoolManager()
url = 'http://www.baidu.com/s'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = http.request('POST', url, fields={'wd': ' '}, headers=headers)
for key in response.info().keys():
print('key:',response.info()[key])
실행 후 되 돌아 오 는 응답 데 이 터 는 다음 과 같 습 니 다.파일 업로드
우선,파일 업로드 서버 코드 를 간단하게 실현 해 야 합 니 다.여기 서 저 희 는 Flask 를 사용 하여 간단 한 서버 Python 프로그램 을 만 듭 니 다.코드 는 다음 과 같 습 니 다.
import flask
import os
UPLOAD_FILE = 'uploads'
app = flask.Flask(__name__)
@app.route('/', methods=['POST'])
def upload_file():
file = flask.request.files['file']
if file:
file.save(os.path.join(UPLOAD_FILE, os.path.basename(file.filename)))
return ' '
else:
return ' '
if __name__ == '__main__':
app.run()
실행 되면 클 라 이언 트 가 파일 을 업로드 하 기 를 기다 리 고 있 습 니 다.이때,우 리 는 urllib 3 가 어떻게 파일 을 업로드 하 는 지 다시 실현 합 니 다.예 는 다음 과 같 습 니 다.
import urllib3
http = urllib3.PoolManager()
with open('1.jpg', 'rb') as f:
fileData = f.read()
url = 'http://127.0.0.1:5000'
response = http.request('POST', url, fields={'file': ('1.jpg', fileData, 'image/jpeg')})
print(response.data.decode('UTF-8'))
기본 flask 가 구축 한 서버 의 인 터 페 이 스 는 5000,즉 127.0.0.1:5000 을 통 해 접근 합 니 다.실행 되면 uploads 폴 더 아래 1.jpg 그림 을 만 듭 니 다.또한 콘 솔 은 파일 업로드 에 성공 하고 서버 는 상태 코드 200 을 되 돌려 줍 니 다.
여기에 파일 을 업로드 하 는 데 키 값 이 하나 있 습 니 다.그 중에서 file 은 서버 가 파일 을 업로드 하 는 필드 를 대표 합 니 다.값 의 원본 그룹 에서 fileData 는 파일 의 바 이 너 리 형식 입 니 다.'image/jpeg'는 파일 을 업로드 하 는 형식 을 대표 합 니 다(생략 할 수 있 습 니 다).
시간 초과 처리
urllib 3 라 이브 러 리 의 HTTP 밑바닥 은 모두 Socket 을 바탕 으로 이 루어 진 것 이 고 Socket 의 시간 초 과 는 연결 시간 초과 와 읽 기 시간 초과 로 나 뉜 다.
이 가운데 연결 시간 이 초과 되 는 것 은 연결 과정 에서 서버 의 문제 나 도 메 인 이름 이 잘못 되 어 연결 할 수 없 는 상황 에서 던 진 이상 을 나타 낸다.
읽 기 시간 초 과 는 서버 에서 데 이 터 를 읽 을 때 서버 의 문제 로 장시간 데 이 터 를 제대로 읽 지 못 해 발생 하 는 이상 을 나타 낸다.
일반적으로 우리 가 시간 을 초과 한 설정 은 두 가지 가 있 는데 하 나 는 http.request(timeout)를 통 해 설정 하고 하 나 는 PoolManager()연결 풀 을 통 해 설정 합 니 다.예 는 다음 과 같다.
from urllib3 import *
http = PoolManager(timeout=Timeout(connect=2.0, read=2.0))
with open('1.jpg', 'rb') as f:
fileData = f.read()
url = 'http://127.0.0.1:5000'
try:
response = http.request('POST', url, timeout=Timeout(connect=2.0, read=4.0))
print(response.data.decode('UTF-8'))
except Exception as e:
print(e)
주의해 야 할 것 은 연못 PoolManager 연결 을 통 해 설정 한 시간 초과 입 니 다.전역 시간 초과 입 니 다.뒤의 요청 이 설정 되 지 않 더 라 도 기본적으로 사용 하 는 시간 초과 입 니 다.request 의 시간 초과 가 동시에 설정 되 어 있 으 면 request 를 기준 으로 합 니 다.파 이 썬 파충류 중 urllib 3 와 urllib 의 차이 점 이 무엇 인지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 urllib 3 urllib 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.