Python 3 학습 urllib 의 사용 방법 예시

6666 단어 Pythonurllib
urllib 는 python 에서 url(Uniform Resource Locators,통 일 된 자원 주소 지정 문자)을 가 져 왔 습 니 다.이 를 이용 하여 원 격 데 이 터 를 캡 처 하여 저장 할 수 있 습 니 다.본 고 는 urllib 사용 중의 header,대리,시간 초과,인증,이상 처리 방법 에 대해 정리 하 였 습 니 다.
1.기본 방법
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
  • url:  열 어야 할 사이트 주소
  • data:Post 가 제출 한 데이터
  • timeout:사이트 방문 시간 초과 설정
  • urllib.request 모듈 의 urlopen()으로 페이지 를 직접 가 져 옵 니 다.page 의 데이터 형식 은 bytes 형식 이 고 decode()디 코딩 이 필요 하 며 str 형식 으로 변환 해 야 합 니 다.
    
    from urllib import request
    response = request.urlopen(r'http://python.org/') # <http.client.HTTPResponse object at 0x00000000048BC908> HTTPResponse  
    page = response.read()
    page = page.decode('utf-8')
    urlopen 반환 대상 제공 방법:
  • read(),readline(),readlines(),fileno(),close():HTTP Response 형식 데이터 조작
  • info():HTTPMessage 대상 을 되 돌려 원 격 서버 가 되 돌아 오 는 헤더 정보
  • getcode():Http 상태 코드 를 되 돌려 줍 니 다.http 요청 이 라면 200 요청 이 성공 적 으로 완료 되 었 습 니 다.404 찾 을 수 없 음
  • geturl():요청 한 url
  • 을 되 돌려 줍 니 다.
    1.간단하게 웹 페이지 정보 읽 기
    
    import urllib.request 
    response = urllib.request.urlopen('http://python.org/') 
    html = response.read() 
    2,사용 request
    urllib.request.Request(url, data=None, headers={}, method=None)
    요청 을 request()로 포장 하고 urlopen()을 통 해 페이지 를 가 져 옵 니 다.
    
    import urllib.request 
    req = urllib.request.Request('http://python.org/') 
    response = urllib.request.urlopen(req) 
    the_page = response.read() 
    3.데 이 터 를 보 내 고 로그 인 을 예 로 들 면
    
    ''''' 
    Created on 2016 5 31  
     
    @author: gionee 
    ''' 
    import gzip 
    import re 
    import urllib.request 
    import urllib.parse 
    import http.cookiejar 
     
    def ungzip(data): 
      try: 
        print("     ...") 
        data = gzip.decompress(data) 
        print("    ") 
      except: 
        print("    ,    ") 
       
      return data 
         
    def getXSRF(data): 
      cer = re.compile('name=\"_xsrf\" value=\"(.*)\"',flags = 0) 
      strlist = cer.findall(data) 
      return strlist[0] 
     
    def getOpener(head): 
      # cookies    
      cj = http.cookiejar.CookieJar() 
      pro = urllib.request.HTTPCookieProcessor(cj) 
      opener = urllib.request.build_opener(pro) 
      header = [] 
      for key,value in head.items(): 
        elem = (key,value) 
        header.append(elem) 
      opener.addheaders = header 
      return opener 
    # header      firebug   
    header = { 
      'Connection': 'Keep-Alive', 
      'Accept': 'text/html, application/xhtml+xml, */*', 
      'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 
      'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0', 
      'Accept-Encoding': 'gzip, deflate', 
      'Host': 'www.zhihu.com', 
      'DNT': '1' 
    } 
     
    url = 'http://www.zhihu.com/' 
    opener = getOpener(header) 
    op = opener.open(url) 
    data = op.read() 
    data = ungzip(data) 
    _xsrf = getXSRF(data.decode()) 
     
    url += "login/email" 
    email = "    " 
    password = "    " 
    postDict = { 
      '_xsrf': _xsrf, 
      'email': email, 
      'password': password, 
      'rememberme': 'y'  
    } 
    postData = urllib.parse.urlencode(postDict).encode() 
    op = opener.open(url,postData) 
    data = op.read() 
    data = ungzip(data) 
     
    print(data.decode()) 
    
    4.http 오류
    
    import urllib.request 
    req = urllib.request.Request('http://www.lz881228.blog.163.com ') 
    try: 
      urllib.request.urlopen(req) 
    except urllib.error.HTTPError as e: 
    print(e.code) 
    print(e.read().decode("utf8")) 
    5.이상 처리
    
    from urllib.request import Request, urlopen 
    from urllib.error import URLError, HTTPError 
     
    req = Request("http://www.abc.com /") 
    try: 
      response = urlopen(req) 
    except HTTPError as e: 
      print('The server couldn't fulfill the request.') 
      print('Error code: ', e.code) 
    except URLError as e: 
      print('We failed to reach a server.') 
      print('Reason: ', e.reason) 
    else: 
      print("good!") 
      print(response.read().decode("utf8")) 
    
    6.http 인증
    
    import urllib.request 
     
    # create a password manager 
    password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() 
     
    # Add the username and password. 
    # If we knew the realm, we could use it instead of None. 
    top_level_url = "https://www.jb51.net /" 
    password_mgr.add_password(None, top_level_url, 'rekfan', 'xxxxxx') 
     
    handler = urllib.request.HTTPBasicAuthHandler(password_mgr) 
     
    # create "opener" (OpenerDirector instance) 
    opener = urllib.request.build_opener(handler) 
     
    # use the opener to fetch a URL 
    a_url = "https://www.jb51.net /" 
    x = opener.open(a_url) 
    print(x.read()) 
     
    # Install the opener. 
    # Now all calls to urllib.request.urlopen use our opener. 
    urllib.request.install_opener(opener) 
    a = urllib.request.urlopen(a_url).read().decode('utf8') 
     
    print(a) 
    
    7.사용 에이전트
    
    import urllib.request 
     
    proxy_support = urllib.request.ProxyHandler({'sock5': 'localhost:1080'}) 
    opener = urllib.request.build_opener(proxy_support) 
    urllib.request.install_opener(opener) 
     
    a = urllib.request.urlopen("http://www.baidu.com ").read().decode("utf8") 
    print(a) 
    
    8.시간 초과
    
    import socket 
    import urllib.request 
     
    # timeout in seconds 
    timeout = 2 
    socket.setdefaulttimeout(timeout) 
     
    # this call to urllib.request.urlopen now uses the default timeout 
    # we have set in the socket module 
    req = urllib.request.Request('https://www.jb51.net /') 
    a = urllib.request.urlopen(req).read() 
    print(a) 
    
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기