Cookie は、ユーザーの身元を特定し、セッション追跡を実行するために、一部の Web サイトによってユーザーのローカル端末に保存されるデータ (通常は暗号化された) を指します。
たとえば、一部の Web サイトでは、必要な情報を取得するためにログインが必要です。ログインしないと、Urllib2 ライブラリを使用して以前にログインした Cookie を保存し、その Cookie をロードすることができます。目的のページを取得し、それをクロールします。 Cookie を理解することは、主に、ログインをすばやくシミュレートし、対象の Web ページをクロールするための準備をすることです。
前回の投稿では、urlopen() 関数を使用してクロール用の Web ページを開きました。これは単なる Python の Web ページ オープナーであり、そのパラメータは urlopen(url, data, timeout) の 3 つだけです。ターゲット ページの Cookie を取得するには十分ではありません。この時点では、別の Opener-CookieJar を使用します。
Cookielib も Python クローラーにとって重要なモジュールであり、urllib2 と組み合わせて目的のコンテンツをクロールできます。このモジュールの CookieJar クラスのオブジェクトは Cookie をキャプチャし、後続の接続リクエストで再送信できるため、必要なシミュレートされたログイン機能を実現できます。
ここでの特別な注意は、cookielib が py2.7 の組み込みモジュールであることです。組み込みモジュールを表示したい場合は、Python ディレクトリの Lib フォルダーを参照できます。これには、インストールされているすべてのモジュールが含まれます。最初は何も考えず、pycharm で cookielib が見つかりませんでした。クイックインストールを使用すると、「Cookielib」のインデックス ページが見つかりませんでした (スペルが間違っている可能性があります)
。それから、私がそれを持ってきたのが原因だったかどうかを思い出しましたが、libフォルダーに行ったときにそれが存在するとは予想しておらず、30分を無駄にしました~~
それでは、このモジュールを紹介しましょう。このモジュールの主なオブジェクトは、CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar です。
それらの関係: CookieJar —- 派生 —-> FileCookieJar —- 派生 —–> MozillaCookieJar と LWPCookieJar の主な使用法については、以下で説明します。 urllib2.urlopen() 関数は、認証、Cookie、またはその他の高度な HTTP 機能をサポートしません。これらの関数をサポートするには、build_opener() (python プログラムにブラウザー アクセスをシミュレートさせるために使用できます。関数 ~ はご存知でしょう) 関数を使用してカスタム Opener オブジェクトを作成する必要があります。
1. まず、ウェブサイトの Cookie を取得しましょう
例:
#coding=utf-8 import cookielib import urllib2 mycookie = cookielib.CookieJar() #声明一个CookieJar的类对象保存cookie(注意CookieJar的大小写问题) handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2库中的HTTPCookieProcessor来声明一个处理cookie的处理器 opener = urllib2.build_opener(handler) #利用handler来构造opener,opener的用法和urlopen()类似 response = opener.open("http://www.baidu.com") #opener返回的一个应答对象response for item in my.cookie: print"name="+item.name print"value="+item.value
結果:
name=BAIDUID value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1 name=BIDUPSID value=73BD718962A6EA0DAD4CB9578A08FDD0 name=H_PS_PSSID value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398 name=PSTM value=1478834132 name=BDSVRTM value=0 name=BD_HOME value=0
このようにして、最も単純な Cookie を取得します。
2. Cookie をファイルに保存します。
上記で Cookie を取得しました。次に、Cookie を保存する方法を学びます。ここでは、そのサブクラス MozillaCookieJar を使用して Cookie を保存します
例:
#coding=utf-8 import cookielib import urllib2 mycookie = cookielib.MozillaCookieJar() #声明一个MozillaCookieJar的类对象保存cookie(注意MozillaCookieJar的大小写问题) handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2库中的HTTPCookieProcessor来声明一个处理cookie的处理器 opener = urllib2.build_opener(handler) #利用handler来构造opener,opener的用法和urlopen()类似 response = opener.open("http://www.baidu.com") #opener返回的一个应答对象response for item in mycookie: print"name="+item.name print"value="+item.value filename='mycookie.txt'#设定保存的文件名 mycookie.save(filename,ignore_discard=True, ignore_expires=True)
この例は、CookieJar のサブクラスである MozillaCookiJar を単純に変換することで取得できます。 MozillaCookiJar を CookieJar に置き換えてみましょう。次の図で理解できます:
CookieJar は save 属性を保存しません~
save() メソッド内:ignore_discard は、Cookie が破棄されても保存することを意味します。 ignore_expires は、Cookie がファイル内にすでに存在する場合、元のファイルが上書きされることを意味します。ここでは、これらの両方を True に設定します。実行後、Cookie は cookie.txt ファイルに保存されます。内容を確認してみましょう:
このようにして、ファイルから Cookie を取得して
にアクセスします。<pre style="background-color: rgb(255, 255, 255); font-family: 宋体; font-size: 9pt;"><pre name="code" class="python">#coding=utf-8 import urllib2 import cookielib import urllib #第一步先给出账户密码网址准备模拟登录 postdata = urllib.urlencode({ 'stuid': '1605122162', 'pwd': 'xxxxxxxxx'#密码这里就不泄漏啦,嘿嘿嘿 }) loginUrl = 'http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp'# 登录教务系统的URL,成绩查询网址 # 第二步模拟登陆并保存登录的cookie filename = 'cookie.txt' #创建文本保存cookie mycookie = cookielib.MozillaCookieJar(filename) # 声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(mycookie)) #定义这个opener,对象是cookie result = opener.open(loginUrl, postdata) mycookie.save(ignore_discard=True, ignore_expires=True)# 保存cookie到cookie.txt中 # 第三步利用cookie请求访问另一个网址,教务系统总址 gradeUrl = 'http://ids.xidian.edu.cn/authserver/login?service' #只要是帐号密码一样的网址就可以, 请求访问成绩查询网址 result = opener.open(gradeUrl) print result.read()
核心思想:创建opener,包含了cookie的内容。之后在利用opener时,就会自动使用原先保存的cookie.
読んでいただきありがとうございます、お役に立てれば幸いです、このサイトをサポートしていただきありがとうございます!
Cookie を使用してシミュレートされたログイン例を実装する Python クローラーの詳細な説明については、PHP 中国語 Web サイトに注目してください。