Python爬虫類入門:urllibを使用する.requestのHandlerクラスでOpenerを構築する

12775 ワード

Python爬虫類入門:urllibを使用する.requestのHandlerクラスでOpenerを構築する
  • 概要
  • 検証
  • エージェント
  • Cookies
  • Cookies
  • を取得
  • は取得したCookies
  • を記憶する.
  • は通常のフォーマット
  • として保存する.
  • はLWP形式
  • として保存する.
  • Cookies
  • を読み取り利用する.
    概要
    リクエスト時には、ログイン検証やCookiesの処理、エージェントの設定などに遭遇することが多く、その際にはHandlerが登場する必要があります.urllib.requestモジュールのBaseHandlerはすべてのHandlerクラスの親であり、default_などの最も基本的な方法を提供しています.open(),protocol_request()など.基本的なHanderクラスは以下の通りです.
    クラス#クラス#
    さぎょう
    HTTPDefaultErrorHandler
    HTTP応答エラーを処理すると、HTTPError異常が放出されます
    HTTPRedirectHandler
    リダイレクトの処理
    HTTPCookieProcessor
    Cookiesの処理に使用
    ProxyHandler
    プロキシの設定に使用します.デフォルトのプロキシは空です.
    HTTPPasswordMgr
    パスワードの管理、ユーザー名とパスワードの維持に使用されるテーブル
    HTTPBasicAuthHandler
    資格認定の管理
    検証#ケンショウ#
    from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener
    from urllib.error import URLError
    
    username = 'username'
    password = 'password'
    url = 'https://www.baidu.com'
    
    p = HTTPPasswordMgrWithDefaultRealm()
    p.add_password(None, url, username, password)
    auth_handler = HTTPBasicAuthHandler(p)
    opener = build_opener(auth_handler)
    
    try:
    	result = opener.open(url)
    	html = result.read().decode('utf-8')
    	print(html)
    except URLError as e:
    	print(e.reason)
    

    エージェント
    from urllib.error import URLError
    from urllib.request import ProxyHandler, build_opener
    
    proxy_handler = ProxyHandler({
    	'http': '113.128.8.9:9999',
    	'https': '113.128.8.9:9999'
    })
    opener = build_opener(proxy_handler)
    try:
    	response = opener.open('https://www.baidu.com')
    	print(response.read().decode('utf-8'))
    except URLError as e:
    	print(e.reason)
    

    Cookies
    Cookiesの取得
    import http.cookiejar, urllib.request
    
    cookie = http.cookiejar.CookieJar()
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    response = opener.open('http://www.baidu.com')
    for item in cookie:
    	print(item.name+" = "+item.value)
    

    取得したCookiesを保存
    標準形式で保存
    import http.cookiejar, urllib.request
    
    filename = 'cookies.txt'
    cookie = http.cookiejar.MozillaCookieJar(filename)
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    response = opener.open('http://www.baidu.com')
    cookie.save(ignore_discard=True, ignore_expires=True)
    

    LWP形式で保存
    import http.cookiejar, urllib.request
    
    filename = 'cookies.txt'
    cookie = http.cookiejar.LWPCookieJar(filename)
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    response = opener.open('http://www.baidu.com')
    cookie.save(ignore_discard=True, ignore_expires=True)
    

    Cookiesの読み取りと利用
    import http.cookiejar, urllib.request
    
    cookie = http.cookiejar.LWPCookieJar()
    cookie.load('cookies.txt', ignore_discard=True, ignore_expires=True)
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    response = opener.open('http://www.baidu.com')
    print(response.read().decode('utf-8'))