PythonクローラーはCookieを使用してログイン確認コードをスキップします

ビッグデータの時代には、多くの人がクローラーを使用してインターネット上のデータを収集しますが、一部のWebサイトにはクロール防止の戦略があります。一部のWebページをクロールする場合、インターフェイスにログインするときにハードルが発生することがよくあります。現在、ほとんどの場合、ユーザーはログイン時に確認コードを入力する必要があります。確認コードは、静止画像、動的確認コード、スライド、12306確認モード、さらにはSMS確認コードなどのさまざまな形式をとることができます。現在の技術でも画像認識を解決することはできますが、ウェブサイトの検証スキームを変更すると、アルゴリズム全体が覆される可能性があります。明らかに、検証コードを強制的に解読するのはありがたい戦略です。Pythonのリクエストモジュールを使用して、reqeust.sessionの下のCookieを使用してログインリンクをスキップするシミュレートされたログインを実行できます。この記事のデバッグブラウザはクロムです。ブラウザは異なる場合がありますが、ロジックは同じです。の。

リクエストヘッダー情報を取得する

ここに画像の説明を挿入

リクエストヘッダーデータを抽出します

agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
headers = {
    
    
    "HOST": "xxx.com",
    "Referer": "http://xxx.com/Manager/Main.aspx",
    "User-Agent": agent
}

クッキーを取得する

この手順はより重要です。つまり、ログイン情報を取得するために1回正常にログインし、F12> [アプリケーション]> [Cookies]をクリックして、ログインに成功した後にCookieデータを検索します。

ここに画像の説明を挿入

写真のコーディングは個人のプライバシーを保護するためのものであるため、一時的に消去されてから、名前と値の値がコピーされ、辞書の形式で変数に保存されます。

cookies = {
    
    
	'xxx_cookie_time':'2020-04-28+10%3a59%3a19',
	'xxx_cookie_language': 'zh_CN',
	'ASP.NET_SessionId': 'v0vszqppwpxxxxxxxx',
	'ValidCode':'OicQ%2bxxxx',
	'xxx_session_id':'FUl0%2b4kCmyEyxxxxxxxxxx',
	'_ati':'1733720xxxx'
}

セッションを作成し、ページログインを実装します

次に、セッションオブジェクトを作成し、ヘッダーとCookieをセッションに割り当てます

import requests
session = requests.session()
session.headers = headers
requests.utils.add_dict_to_cookiejar(session.cookies, cookies)

その中で、session.headersはdictである可能性があるため、直接割り当ては問題ありませんが、session.cookiesは<class'requests.cookies.RequestsCookieJar '>である必要があるため、requests.utils.add_dict_to_cookiejarを使用する必要があります。割り当て。リアルタイムのログインセッションができたので、通常どおりWebサイトの任意のWebページにアクセスできます。

url='http://xxx.com/Order/CodeByOrder.aspx?OrderCode=xxxxxx'
response = session.get(url)
>>> response
<Response [200]>

これで、ページのソースコードを正常に取得でき、必要なデータを分析して抽出できます。

GET / POSTリクエストを送信する場合は、既存のCookieをキャッシュし、それをパラメータとしてリクエストに返して、リクエストを送信するためにログインが必要な操作を実現できます。

cookies_dict = requests.utils.add_dict_to_cookiejar(session.cookies, cookies)
resget = requests.get(url, headers = headers, cookies = cookies_dict) # GET
respost = requests.post(url, headers = headers, cookies = cookies_dict) # POST
print(resget.text)
print(respost.text)

注:Cookieを使用して、ログイン方法をシミュレートします。一度ログインしたCookieが無効になったら、Cookieを取得するには再度ログインする必要があります。

完全なコード

import requests

agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
headers = {
    
    
    "HOST": "xxx.com",
    "Referer": "http://xxx.com/Manager/Main.aspx",
    "User-Agent": agent
}

cookies = {
    
    
	'xxx_cookie_time':'2020-04-28xxxx',
	'xxx_cookie_language': 'zh_CN',
	'ASP.NET_SessionId': 'v0vszqppwpxxxxx',
	'ValidCode':'OicQ%2b2xxxx',
	'xxx_session_id':'FUl0%2b4kCmyEyxxxxxxxxxx',
	'_ati':'1733720xxxx'
}
session = requests.session()
session.headers = headers
requests.utils.add_dict_to_cookiejar(session.cookies, cookies)
url='http://xxx.com/Order/CodeByOrder.aspx?OrderCode=xxxxxx'
response = session.get(url)
>>> response
<Response [200]>

注:Cookieを使用してログインをシミュレートします。デフォルトのCookieの有効期限は、ブラウザを閉じるまでです。ブラウザを閉じて、ログインする必要のあるWebページを再度開くと、再度ログインする必要がある場合がよくあります。 。これは、ブラウザが閉じて一時的なセッションセッションが終了したためです。最後に、メモリに一時的に保存されていたCookieが解放されるため、セッションやCookieなどを再生成するために再度ログインするにはパスワードを再入力する必要があります。

おすすめ

転載: blog.csdn.net/Lin_Hv/article/details/105810489