Urllibライブラリの使用9---ステップ4(Cookiejarの使用)

4848 ワード

前編のコードでは、実はCookieを取得し、Cookieを通じてウェブページのデータを要求することが実現されていることがわかりますが、これは明らかに柔軟ではなく、複雑ではありません.私たちは少し便利な方法がありますか?
CookiejarライブラリとHTTPCookieProcessorプロセッサ
  • はPythonでCookieを処理し、一般的にcookiejarモジュールとurllibモジュールのHTTPCookieProcessorプロセッサクラスで使用される.

  • Cookiejarモジュール:主な役割は、cookieを格納するオブジェクトHTTPCookieProcessorプロセッサを提供することです.主な役割は、これらのcookieオブジェクトを処理し、handlerオブジェクトを構築することです.
    Cookiejarライブラリ
  • このモジュールの主なオブジェクトはCookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJarである.

  • CookieJar:HTTPクッキーの値を管理し、HTTPリクエストによって生成されたクッキーを格納し、送信されたHTTPリクエストにクッキーを追加するオブジェクト.クッキー全体がメモリに格納され、クッキーJarインスタンスをゴミ回収するとクッキーも失われます.

  • FileCookieJar(filename,delayload=None,policy=None):CookieJarから派生し、FileCookieJarインスタンスを作成し、cookie情報を取得してファイルに格納するために使用されます.filenameはクッキーを格納するファイル名です.delayloadがTrueの場合、必要に応じてファイルを読み込むか、ファイルにデータを格納するかの遅延アクセスファイルがサポートされます.

  • MozillaCookieJar(filename,delayload=None,policy=None):FileCookieJarから派生してMozillaブラウザcookiesを作成する.txt互換性のあるFileCookieJarインスタンス.

  • LWPCookieJar(filename,delayload=None,policy=None):FileCookieJarから派生し、libwww-perl規格のSet-Cookie 3ファイルフォーマットと互換性のあるFileCookieJarインスタンスを作成します.

  • ほとんどの場合、CookieJar()のみを使用し、ローカルファイルと対話する必要がある場合はMozillaCookjar()を使用します.
    インスタンス1
    Cookieを取得し、CookieJar()オブジェクトに保存します.
    # urllib_cookiejar_test1.py
    import urllib
    from http import cookiejar
    #     CookieJar       cookie
    cookiejar = cookiejar.CookieJar()
    #   HTTPCookieProcessor()   cookie     ,   CookieJar()  
    handler=urllib.request.HTTPCookieProcessor(cookiejar)
    #    build_opener()    opener
    opener = urllib.request.build_opener(handler)
    # 4.  get      ,         cookie cookiejar 
    opener.open("http://www.baidu.com")
    ##            Cookie    
    cookieStr = ""
    for item in cookiejar:
        cookieStr = cookieStr + item.name + "=" + item.value + ";"
    
    ##          
    print (cookieStr[:-1])
    #         Cookie   cookiejar   
    

    インスタンス2
    MozillaCookjar()を使用してWebサイトまたはクッキーにアクセスし、作成したクッキーファイルに保存します.
    import urllib.request
    import http.cookiejar
    #     
    filename = 'cookie.txt'
    #     MozillaCookieJar  ,MozillaCookieJar (filename,delayload=None,policy=None)
    cookiejar = http.cookiejar.MozillaCookieJar(filename)
    #   HTTPCookieProcessor()  cookie     
    handler = urllib.request.HTTPCookieProcessor(cookiejar)
    #  build_opener()   opener
    opener = urllib.request.build_opener(handler)
    #  opener.open      
    response = opener.open('http://www.baidu.com')
    #  cookie     ,cookie.txt
    cookiejar.save()
    

    例3
    MozillaCookjar()ファイルからcookiesを取得し、リクエストの一部としてアクセス
    import urllib.request
    import http.cookiejar as cookiejar
    #     
    cookiejar = cookiejar.MozillaCookieJar()
    #    cookie  
    cookiejar.load('cookie.txt')
    for i in cookiejar:
        print(i.name,i.value)
    

    cookiejarとpostシミュレーションログイン人人網
    シミュレーション・ログインでは、次の点に注意してください.
  • ログインは、一般的に、いくつかの情報を引き出し、Cookieを取得してからHTTP POSTログインするためのHTTP GETがあります.
  • HTTP POST登録のリンクが動的である可能性があり、GETから返された情報から取得する.
  • passwordは明文で送信されるものもあれば、暗号化されて送信されるものもあります.一部のサイトでは動的暗号化を採用しているが、他の多くのデータの暗号化情報も含まれており、JSソースコードを表示することで暗号化アルゴリズムを取得し、暗号化を解読することは非常に困難である.
  • ほとんどのWebサイトのログイン全体の流れは似ています.詳細が異なる場合があります.そのため、他のWebサイトのログインが成功することを保証することはできません.
  • # -*- coding:utf-8 -*-
    import urllib.request
    import http.cookiejar as cookiejar
    from urllib import parse
    #1.    CookieJar       cookie
    cookie = cookiejar.CookieJar()
    # 2.  HTTPCookieProcessor()  cookie     ,
    #    CookieJar()  
    cookie_handler = urllib.request.HTTPCookieProcessor(cookie)
    #3.  build_opener()   opener
    opener = urllib.request.build_opener(cookie_handler)
    #4.addheaders      ,           headers     
    #opener    header  
    opener.addheaders = [
        ('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:59.0) Gecko/20100101 Firefox/59.0'),
    ]
    #5.         
    data = {
        'email':'  ',
        'password':'  ',
    }
    #6.   urlencode()  
    postdata = parse.urlencode(data).encode('utf-8')
    #7.   Request    ,             
    request = urllib.request.Request("http://www.renren.com/PLogin.do", data = postdata)
    # 8.   opener      ,       Cookie ,
    opener.open(request)
    # 9. opener        Cookie ,                   
    response = opener.open("http://www.renren.com/965722397/profile")
    
    #         cookie         
    #headers = {
    #    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:59.0) Gecko/20100101 #Firefox/59.0',
    #}
    # request = urllib.request.Request('http://www.renren.com/965722397/profile',headers=headers)
    # response = urllib.request.urlopen(request)
    
    # 10.       
    #            
    print(response.code)
    html = response.read()
    # print(html)
    
    with open('renren.html','wb') as f:
        f.write(html)