スパイダーデータマイニング-8、スクレイプフレームワーク(4)

Requestクラスは、scrapyモジュールのリクエストリクエストの基本クラスです。また、リクエストリクエストクラスには、Requestクラスを継承および拡張するFormRequestクラスもあります。

1つ、リクエスト

Scrapy.http.Request:

Scrapy.http.Requestクラスは、scrapyフレームワークのリクエストの基本クラスです。そのパラメーターは次のとおりです
。url(文字列)
-このリクエストのURL、リクエストのコールバックを開始したURL (呼び出し可能)-コールバック関数
メソッド(文字列)-このリクエストのHTTPメソッド。デフォルトは「GET」です。
meta(dict)-Request.meta属性の初期値。
body(strまたはunicode)-bodyを要求します。パラメータが渡されない場合、デフォルトは空の文字列です。
headers(dict)-このリクエストのリクエストヘッダー。
クッキー-クッキーを要求します。
encoding(string)-このリクエストのエンコーディング(デフォルトは「utf-8」)。このエンコーディングは、URLをパーセントエンコードし、本文をstrに変換するために使用されます(ユニコードが指定されている場合)。
priority(int)-このリクエストの優先度(デフォルトは0、優先度はパイプラインとは異なり、高いものから低いものへ)。
dont_filter(boolean)-スケジューラーがこの要求をフィルター処理してはならないことを示します。(デフォルトでフィルタリングされます)
errback(呼び出し可能-要求の処理中に例外が発生したときに呼び出される関数。(コールバック関数です)
flags(list -リクエストに送信されるフラグ。ロギングまたは同様の目的で使用できます。

a =リクエスト(url、·······)

cb_kwargsdict)–任意のデータを含むdict。キーワード引数としてコールバックに渡されます。

プロパティとメソッド:

urlこのリクエストのURLを含む文字列。この属性は読み取り専用です。リクエストで使用されるURLreplace()を変更します。
methodリクエスト内のHTTPメソッドを表す文字列。
headersリクエストヘッダーを含む辞書のようなオブジェクト。
bodyには、リクエスト本文のstrが含まれます。この属性は読み取り専用です。リクエストで使用されるURLreplace()を変更します。
metaこのリクエストのメタデータを含む辞書。
copy()は新しいリクエストを返し、変更リクエストはこのリクエストのコピーです。コピーをコピーして
置換([URL、メソッド、ヘッダー、本文、Cookie、メタ、エンコーディング、dont_filter、コールバック、errback])更新されたリクエストを返す

印刷(a.url)

b = a.replace(~~~~~·······)を更新、変更すると、生成されたbが最新のリクエストになります

FormRequest:

主に投稿をより使いやすくするために、postメソッドをより便利に使用して投稿を書き直すことができます

GetリクエストとPostリクエストが最も一般的なリクエストです。スクレイピーフレームワークには
、基本クラスRequestを拡張し、HTMLフォームを処理する機能を持つFormRequestクラスが組み込まれています。

lxml.htmlフォームを使用して、Responseオブジェクトのフォームデータを含むフォームフィールドに事前入力します。

特定のAPI、ソースコードを学びましょう

二、応答

導出:scrapy.http.response importResponseから

パラメータ:応答を作成するとき、次のパラメータの一部は、記述されていない場合、要求のみであり、通常、要求に対応する要求の内容のみを表します。
url(文字列)
-この応答ステータスのURL (整数)-応答のHTTPステータス。デフォルトは200です。
headers(dict)-この応答の応答ヘッダー。dict値は、文字列(単一値ヘッダーの場合)またはリスト(複数値ヘッダーの場合)にすることができます。
本文(バイト)-応答本文。デコードされたテキストにstr(Python 2のunicode)としてアクセスするには、TextResponseなどのエンコーディング対応のResponseサブクラスからresponse.textを使用できます。

画像データの場合は、response.bodyを使用して取得する必要があります。画像データでない場合は、最初にscrapy.http.responseインポートテキスト(ここのテキストのソースコードはデコードされます)からエクスポートする必要があります。 response.text

、通常、response.textを使用して応答コンテンツを印刷します

flags(list)-Response.flagsプロパティの初期値を含むリストです。指定すると、リストは浅くコピーされます。
request(Requestobject)-Response.requestプロパティの初期値。これは、リクエストがこのレスポンスのコンテンツを生成したことを意味します。

属性とメソッド:
URL
ステータス
ヘッダ
ボディ
要求
メタ:要求がある場合は、応答の構成において、応答のメタは、メタ戻ります
の旗。要求を
コピー()は、
([URL、ステータス、ヘッダ、ボディを交換します、request、flags、cls])
Urljoin(url):マージURL
follow(url)

3、ログ使用量

設定で、以下を入力してログを設定します

LOG_FORMAT='%(asctime)s [%(name)s] %(levelname)s:%(message)s'
LOG_DATEFORMAT='%Y'

通常、プロジェクトには次の2つのパラメーターのみが設定されます
。LOG_FILE= 'logfile_name'
LOG_LEVEL = 'INFO'

asctimeはASCIIコード時間、名前コンポーネント名、DATEFORMATは年情報のみが表示されることを示すために%Yのみを追加します

上記の2つのログ構成パラメーターに加えて、以下を入力できます。

これらの設定を使用して、ロギングを構成できます。

LOG_FILEログ出力ファイル。Noneの場合、コンソールに出力されます。通常はNoneです。

pycharmウィンドウで印刷する場合、主にLOG_FILEが閉じているため、コンテンツがコンソールに出力されます。

LOG_FILE = 'ファイル名'を設定して対応するファイルに保存するだけで、そのようなファイルがない場合は自動的に作成されます

LOG_ENABLEDログを有効にするかどうか、デフォルトはTrue、閉じた後はコンソールに送信されませんが、ファイル
LOG_ENCODING日付コードに送信できます。デフォルトはutf-8
LOG_LEVELログレベル、デフォルトのデバッグです。 (デバッグの意味):デフォルトはデバッグ情報です(デバッグは最低レベルのデバッグです)

デバッグ情報DEBUG <一般情報INFO <警告警告<一般エラーERROR <重大エラーCRITICAL

LOG_FORMATログ形式
LOG_DATEFORMATログ日付形式
LOG_STDOUTログ標準出力。デフォルトはFalseです。Trueの場合、すべての標準出力がログに書き込まれます。trueの場合、印刷によって印刷されたものもログに書き込まれます。これは良いことです。表現したい内容を
書き込むためのコンテンツLOG_SHORT_NAMESの短いログ名。デフォルトはFalseです。Trueの場合、コンポーネント名は出力されません。

通常、ログはコンソールに保存されますが、保存時間は長くなく、読み取りも面倒なので、以下のコンポーネントに記録できます。

クモに記録する:

Scrapyロガーは、各Spiderインスタンスでアクセスおよび使用できるインスタンスを提供します

他のコンポーネントに記録する:

もちろん、Pythonロギングを介して記録することもできます。
例:logging.warning( 'これは警告です!')

クローラーファイルのインスタンスメソッドにself.logging.warning( '~~~~~~·······')を追加すると、ログにマークとして書き込むことができます。また、ログに入力することもできます。他のコンポーネントが使用するインスタンスメソッド。

ただし、後でメンテナンスするために、メッセージをカプセル化するためにさまざまなロガーを作成できます。
また、コンポーネントまたは関数の名前を使用して名前を付けます。左のパターンの例を参照してください。

4、Githubログイン

リクエストプロセス:

投稿ユーザー名やパスワードなどのデータをセッションURLに送信して、ログインページを取得します

特定の提出内容は、ページコードのフォームデータで表示できます。

commit: Sign in
authenticity_token: JU/SqAIMuKu3rPzOQIpRTceVO31XU6Nw68DNPRqdvfoUTDVt1FBpR8lbsmqGLxhvtj4IloWy8EMvZshupa+9yw==
login: [email protected]
password: qweqqweqw
trusted_device: 
webauthn-support: supported
webauthn-iuvpaa-support: supported
return_to: 
allow_signup: 
client_id: 
integration: 
required_field_0a14: 
timestamp: 1611654568362
timestamp_secret: 376cea0b768fde0e5897b8995b2ab6ed62eabc56bd4b5f8ef01cb6a9a2e969a7

間違ったパスワードを2回送信して上記のコンテンツを見つけて比較します。同じものが見つかった場合は無視して、構造の違いを保持できます。キー名が異なっていてもデータがない場合は無視できます。 。タイムスタンプ(timestamp:1611654568362)およびtimestamp_secretを作成する必要があります

パラメータ取得方法を構築する必要があります:

1.前のリクエストページから取得

ログインページにアクセスしてソースコードを表示し、セッションに必要なパラメータを取得します

2.jsコードの動的生成

この段階では考慮されていません

構築が成功した後、formrequestクラスを使用してリクエストする方が便利です

ファイルに対応するディレクトリ内のパスの相対参照システムにファイルを設定できるように、dic·····ソースルートをマークします

おすすめ

転載: blog.csdn.net/qwe863226687/article/details/114117142