Pythonクローラーのスクレイピーシミュレーションログイン

スクレイピーシミュレーションランディング##

学習目標:#####
  1. アプリケーションリクエストオブジェクトのCookieパラメータの使用
  2. start_requests関数の役割を理解する
  3. アプリケーションはポストリクエストを作成して送信します

1. 以前のシミュレーションログイン方法を確認します###

1.1 リクエストモジュールはどのようにシミュレートされたログインを実装しますか?

  1. Cookieを使用してページを直接リクエストする
  2. URLアドレスを見つけて、Cookieを保存するための投稿リクエストを送信します

1.2 セレンはどのようにログインをシミュレートしますか?

  1. 対応する入力タグを見つけ、テキストを入力して[ログイン]をクリックします

1.3 スクレイピーのシミュレーション着陸####

  1. クッキーを直接運ぶ
  2. URLアドレスを見つけて、Cookieを保存するための投稿リクエストを送信します

2. スクレイピーは、ログインする必要のあるページを直接取得するためにCookieを実行します###

アプリケーションシナリオ#####
  1. クッキーの有効期限は非常に長く、一部の不規則なWebサイトで一般的です
  2. Cookieの有効期限が切れる前にすべてのデータを取得できます
  3. ログイン後にセレンを使用してCookieを取得してローカルに保存するなど、他のプログラムと協力し、scrapyがリクエストを送信する前にローカルCookieを読み取ります。

2.1 実現:scrapy ####のstarte_rquestsメソッドをリファクタリングします

スクレイプのstart_urlはstart_requestsで処理され、実装コードは次のとおりです。

# これはソースコードです
def start_requests(self):
 cls = self.__class__
 ifmethod_is_overridden(cls, Spider,'make_requests_from_url'):
  warnings.warn("Spider.make_requests_from_url method is deprecated; it ""won't be called in future Scrapy releases. Please ""override Spider.start_requests method instead (see %s.%s)."%(
    cls.__module__, cls.__name__
   ),) for url in self.start_urls:yield self.make_requests_from_url(url)else:for url in self.start_urls:yieldRequest(url, dont_filter=True)

したがって、それに応じて、start_urlアドレスのurlがログイン後にアクセスできるurlアドレスである場合は、start_requestメソッドを書き直して、手動でCookieを追加する必要があります

2.2 Cookieを使用してgithubにログインします####

テストアカウントnoobpythonerzhoudawei123

import scrapy
import re

classLogin1Spider(scrapy.Spider):
 name ='login1'
 allowed_domains =['github.com']
 start_urls =['https://github.com/NoobPythoner'] #ログイン後にアクセスできるページです

 def start_requests(self): #リファクター開始_リクエストメソッド
  # このクッキー_strはキャプチャによって取得されます
  cookies_str ='...' #キャプチャー
  # クッキー_strはcookieに変換されます_dict
  cookies_dict ={i.split('=')[0]:i.split('=')[1]for i in cookies_str.split('; ')}yield scrapy.Request(
   self.start_urls[0],
   callback=self.parse,
   cookies=cookies_dict
        )

 def parse(self, response): #通常の式を使用してユーザー名を照合し、ログインが成功したかどうかを確認します
  # 通常の一致はgithubのユーザー名です
  result_list = re.findall(r'noobpythoner|NoobPythoner', response.body.decode())print(result_list)
  pass
注意: #####
  1. スクレイプのCookieはヘッダーに配置できません。リクエストを作成するときに、辞書形式のCookieを受け入れることができる特別なCookieパラメーターがあります。
  2. 設定でROBOTSプロトコル、USER_AGENTを設定します

3. sparky.Requestは投稿リクエストを送信します###

メソッドと本体のパラメーターをscrapy.Request()で指定して投稿リクエストを送信できることはわかっていますが、scrapy.FormRequest()は通常投稿リクエストを送信するために使用されます

3.1 投稿リクエストを送信する####

注:scrapy.FormRequest()はフォームとajaxリクエストを送信できます。https://www.jb51.net/article/146769.htmを参照してください。

3.1.1 思考分析#####
  1. 投稿のURLアドレスを見つける:ログインボタンをクリックしてパケットをキャプチャし、URLアドレスをhttps://github.com/sessionとして見つけます。

  2. リクエスト本文の法則を見つける:ポストリクエストのリクエスト本文を分析し、それに含まれるパラメータは前の応答にあります

  3. ログインが成功したかどうか:個人のホームページをリクエストして、ユーザー名が含まれているかどうかを確認します

3.1.2 コードは次のように実装されています:#####
import scrapy
import re

classLogin2Spider(scrapy.Spider):
 name ='login2'
 allowed_domains =['github.com']
 start_urls =['https://github.com/login']

 def parse(self, response):
  authenticity_token = response.xpath("//input[@name='authenticity_token']/@value").extract_first()
  utf8 = response.xpath("//input[@name='utf8']/@value").extract_first()
  commit = response.xpath("//input[@name='commit']/@value").extract_first()
        
  # POSTリクエストを作成し、エンジンに渡します
  yield scrapy.FormRequest("https://github.com/session",
   formdata={"authenticity_token":authenticity_token,"utf8":utf8,"commit":commit,"login":"noobpythoner","password":"***"},
   callback=self.parse_login
       )

 def parse_login(self,response):
  ret = re.findall(r"noobpythoner|NoobPythoner",response.text)print(ret)
チップ#####

settings.pyでCOOKIES_DEBUG = TRUEを設定すると、ターミナルでCookieの配信プロセスを確認できます。


概要##

  1. start_urlsのURLアドレスは、処理のためにstart_requestに渡されます。必要に応じて、start_request関数を書き換えることができます。
  2. Cookieを使用して直接ログインする:CookieはCookieパラメータの受信にのみ渡すことができます
  3. crapy.Request()投稿リクエストを送信

Recommended Posts

Pythonクローラーのスクレイピーシミュレーションログイン
PythonクローラーのJSの分析
地主取引のPythonシミュレーション
pythonクローラーのMongodbとpythonの相互作用
パイソンクローラー開発の学習パス
Python3クローラーでのAjaxの使用
Python3.9の7つの機能
Python3クローラーlearning.md
ファイルをダウンロードするためのPythonヘッドレスクローラーの実装
Python Webクローラー(練習)
Python構文の基本
python_クローラーの基本的な学習
Pythonの基本構文
Pythonの基礎知識(1)
pythonのPrettytableモジュール
09.Python3の共通モジュール
Pythonクローラーgerapyクローラー管理
プレイカードの配布を実現するためのPythonシミュレーション
Pythonの基盤を統合する(4)
Python(7)の基盤を統合する
pythonリスト(LIST)の深い理解
Pythonのタプルの添え字
wavファイルのPython分析
Python(6)の基盤を統合する
Python3クローラーデータクリーニング分析
栄光のパイソンキング壁紙
Python(5)の基盤を統合する
gomokuプログラムのPython実装
Pythonサンドボックスエスケープの分析
Python3.10のいくつかの新機能
Pythonマルチスレッドの深い理解
Pythonオブジェクト指向プログラミングの分析
OpenCVインストールのPythonバージョン
PythonGUIシミュレーション実装計算機
pythonクローラー用のSeleniumビジュアルクローラー
Pythonの9つの機能エンジニアリング手法
python描画モジュールのmatplotlib
パラメータを渡すPythonメソッド
Pythonの基盤を統合する(3)
Python共通モジュールのコレクション