ホームページ  >  記事  >  バックエンド開発  >  Cookie を使用して模擬ログイン例を実装する Python クローラーの詳細な説明

Cookie を使用して模擬ログイン例を実装する Python クローラーの詳細な説明

高洛峰
高洛峰オリジナル
2017-01-18 16:15:311730ブラウズ

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」のインデックス ページが見つかりませんでした (スペルが間違っている可能性があります)

Cookie を使用して模擬ログイン例を実装する Python クローラーの詳細な説明

。それから、私がそれを持ってきたのが原因だったかどうかを思い出しましたが、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 に置き換えてみましょう。次の図で理解できます:

Cookie を使用して模擬ログイン例を実装する Python クローラーの詳細な説明

CookieJar は save 属性を保存しません~

save() メソッド内:ignore_discard は、Cookie が破棄されても保存することを意味します。 ignore_expires は、Cookie がファイル内にすでに存在する場合、元のファイルが上書きされることを意味します。ここでは、これらの両方を True に設定します。実行後、Cookie は cookie.txt ファイルに保存されます。内容を確認してみましょう:

Cookie を使用して模擬ログイン例を実装する Python クローラーの詳細な説明

このようにして、ファイルから 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({
  &#39;stuid&#39;: &#39;1605122162&#39;,
  &#39;pwd&#39;: &#39;xxxxxxxxx&#39;#密码这里就不泄漏啦,嘿嘿嘿
})
loginUrl = &#39;http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp&#39;# 登录教务系统的URL,成绩查询网址
  
# 第二步模拟登陆并保存登录的cookie
filename = &#39;cookie.txt&#39;  #创建文本保存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 = &#39;http://ids.xidian.edu.cn/authserver/login?service&#39;  #只要是帐号密码一样的网址就可以, 请求访问成绩查询网址
result = opener.open(gradeUrl)
print result.read()





创建一个带有cookie的opener,在访问登录的URL时,将登录后的cookie保存下来,然后利用这个cookie来访问其他网址。


核心思想:创建opener,包含了cookie的内容。之后在利用opener时,就会自动使用原先保存的cookie.

    

読んでいただきありがとうございます、お役に立てれば幸いです、このサイトをサポートしていただきありがとうございます!

Cookie を使用してシミュレートされたログイン例を実装する Python クローラーの詳細な説明については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。