Python 파충류 중 urllib 3 와 urllib 의 차 이 는 무엇 입 니까?

11785 단어 Pythonurllib3urllib
urllib 라 이브 러 리
urllib 는 네트워크 요청 을 처리 하 는 python 표준 라 이브 러 리 로 4 개의 모듈 을 포함 합 니 다.
  • urllib.request---요청 모듈,네트워크 요청 을 시작 하 는 데 사용
  • urllib.parse-분석 모듈,URL 분석
  • urllib.error--이상 처리 모듈,request 로 인 한 이상 처리
  • urllib.robotparser robots.tx-robots.txt 파일 을 분석 하 는 데 사용
  • urllib.request 모듈
    request 모듈 은 주로 네트워크 요청 을 구성 하고 시작 하 며 Headers,Proxy 등 을 추가 합 니 다.이 를 이용 하면 브 라 우 저의 요청 시작 과정 을 모 의 할 수 있 습 니 다.
  • 네트워크 요청
  • 쿠키 조작
  • Headers 추가
  • 사용 에이전트
  • urllib.request.urlopen 매개 변수 에 대한 소개
    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 의 대상 을 되 돌려 줍 니 다.그것 은 돌아 와 달라 고 요청 한 데이터 결 과 를 포함 하고 있다.그것 은 우리 가 되 돌아 오 는 결 과 를 처리 할 수 있 도록 속성 과 방법 을 포함 하고 있다.
  • read()응답 이 되 돌아 오 는 데 이 터 를 가 져 옵 니 다.
  • readline()한 줄 읽 기
  • info()응답 헤더 정보 얻 기
  • geturl()접근 한 url
  • getcode()상태 코드 되 돌려 주기
  • urllib.parse 모듈
    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=188
    parse.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 의 하위 클래스 로 세 가지 속성 을 포함 합 니 다.
  • Code:요청 한 상태 코드
  • reason:잘못된 원인
  • headers:응답 하 는 헤더
  • 
    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 는 다음 과 같은 장점 을 가지 고 있다.
  • HTTP 와 SOCKS 프 록 시 지원
  • 압축 코드 지원
  • 100%테스트 보급률
  • 링크 풀 이 있 습 니 다
  • 스 레 드 안전
  • 클 라 이언 트 SLL/TLS 검증
  • 중복 요청 과 HTTP 재 설정 처리 협조
  • multipart 인 코딩 으로 파일 업로드
  • urllib 3 는 Python 의 표준 라 이브 러 리 가 아니 기 때문에 사용 하기 전에 다운로드 설치 가 필요 합 니 다.구체 적 인 명령 은 다음 과 같 습 니 다.
    
    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)
    
    실행 후 효 과 는 다음 과 같 습 니 다.
    GET请求
    여기에서 우 리 는 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)
    
    실행 후 다음 데 이 터 를 되 돌려 줍 니 다:
    Post请求
    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 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기