PythonでWebサイトにログインする

Logging Into Websites With Python



ログイン機能は、今日のWebアプリケーションの重要な機能です。この機能は、サイトの非ユーザーからの特別なコンテンツを保持するのに役立ち、プレミアムユーザーの識別にも使用されます。したがって、Webサイトをスクレイピングする場合、コンテンツが登録ユーザーのみに利用可能であれば、ログイン機能に遭遇する可能性があります。

Webスクレイピングのチュートリアルは過去に取り上げられているため、このチュートリアルでは、ブラウザを使用して手動でログインするのではなく、コードを使用してログインすることでWebサイトにアクセスする方法についてのみ説明します。







このチュートリアルを理解し、Webサイトにログインするためのスクリプトを記述できるようにするには、HTMLについてある程度理解している必要があります。素晴らしいウェブサイトを構築するには十分ではないかもしれませんが、基本的なウェブページの構造を理解するには十分です。



これは、RequestsおよびBeautifulSoupPythonライブラリを使用して行われます。これらのPythonライブラリに加えて、コードを作成する前の初期分析にとって重要であるため、GoogleChromeやMozillaFirefoxなどの優れたブラウザが必要になります。



RequestsライブラリとBeautifulSoupライブラリは、以下に示すように、ターミナルからpipコマンドを使用してインストールできます。





pipインストールリクエスト
pip install BeautifulSoup4

インストールが成功したことを確認するには、Pythonのインタラクティブシェルをアクティブにします。これは、次のように入力して行います。 Python ターミナルに。

次に、両方のライブラリをインポートします。



輸入リクエスト
からbs4輸入BeautifulSoup

エラーがなければ、インポートは成功します。

プロセス

スクリプトを使用してWebサイトにログインするには、HTMLの知識とWebの動作に関する知識が必要です。 Webがどのように機能するかを簡単に見てみましょう。

Webサイトは、クライアント側とサーバー側の2つの主要部分で構成されています。クライアント側は、ユーザーが対話するWebサイトの一部であり、サーバー側は、ビジネスロジックやデータベースへのアクセスなどの他のサーバー操作が実行されるWebサイトの一部です。

リンクを介してWebサイトを開こうとすると、サーバー側にHTMLファイルやCSSやJavaScriptなどの他の静的ファイルを取得するように要求します。この要求は、GET要求と呼ばれます。ただし、フォームに入力したり、メディアファイルやドキュメントをアップロードしたり、投稿を作成したり、[送信]ボタンをクリックしたりすると、サーバー側に情報が送信されます。このリクエストはPOSTリクエストと呼ばれます。

スクリプトを作成するときは、これら2つの概念を理解することが重要です。

ウェブサイトの検査

この記事の概念を実践するために、 スクレープする引用 Webサイト。

Webサイトにログインするには、ユーザー名やパスワードなどの情報が必要です。

ただし、このWebサイトは概念実証としてのみ使用されているため、何でもかまいません。したがって、 管理者 ユーザー名として、 12345 パスワードとして。

まず、ページのソースを表示することが重要です。これにより、Webページの構造の概要がわかります。これは、Webページを右クリックし、[ページソースの表示]をクリックすることで実行できます。次に、ログインフォームを調べます。これを行うには、ログインボックスの1つを右クリックして、 要素を検査します 。要素を検査すると、次のように表示されます。 入力 タグ、次に親 その上のどこかにタグを付けます。これは、ログインが基本的にフォームであることを示しています 役職 ウェブサイトのサーバー側に編集されました。

さて、注意してください 名前 ユーザー名ボックスとパスワードボックスの入力タグの属性。コードを作成するときに必要になります。このウェブサイトでは、 名前 ユーザー名とパスワードの属性は ユーザー名パスワード それぞれ。

次に、ログインに重要な他のパラメータがあるかどうかを知る必要があります。これについて簡単に説明しましょう。 Webサイトのセキュリティを強化するために、通常、クロスサイト偽造攻撃を防ぐためにトークンが生成されます。

したがって、これらのトークンがPOSTリクエストに追加されていない場合、ログインは失敗します。では、そのようなパラメータについてどうやって知るのでしょうか?

[ネットワーク]タブを使用する必要があります。 GoogleChromeまたはMozillaFirefoxでこのタブを取得するには、開発ツールを開き、[ネットワーク]タブをクリックします。

[ネットワーク]タブが表示されたら、現在のページを更新してみてください。リクエストが届くのに気付くでしょう。ログインしようとすると、POSTリクエストが送信されないように注意する必要があります。

[ネットワーク]タブを開いた状態で次に行うことは次のとおりです。ログインの詳細を入力してログインしてみてください。最初に表示されるリクエストはPOSTリクエストです。

POSTリクエストをクリックして、フォームパラメータを表示します。あなたはウェブサイトが持っていることに気付くでしょう csrf_token 値を持つパラメーター。その値は動的な値であるため、を使用してそのような値をキャプチャする必要があります。 得る 使用する前に最初にリクエストしてください 役職 リクエスト。

作業している他のWebサイトの場合、おそらく表示されない可能性があります。 csrf_token ただし、動的に生成される他のトークンが存在する場合があります。時間の経過とともに、ログインを試行する際に本当に重要なパラメーターをよりよく理解できるようになります。

コード

まず、ログインページのページコンテンツにアクセスするには、RequestsとBeautifulSoupを使用する必要があります。

からリクエスト輸入セッション
からbs4輸入BeautifulSoupなのでbs

セッション(()。 なのでNS:
サイト =NS。得る(('http://quotes.toscrape.com/login')。
印刷((サイトコンテンツ)。

これにより、ログインする前に、Loginキーワードを検索すると、ログインページのコンテンツが出力されます。キーワードは、まだログインしていないことを示すページコンテンツにあります。

次に、 csrf_token 以前に[ネットワーク]タブを使用したときにパラメータの1つとして見つかったキーワード。キーワードが 入力 タグを付けると、BeautifulSoupを使用してスクリプトを実行するたびに値を抽出できます。

からリクエスト輸入セッション
からbs4輸入BeautifulSoupなのでbs

セッション(()。 なのでNS:
サイト =NS。得る(('http://quotes.toscrape.com/login')。
bs_content=bs((サイトコンテンツ 'html.parser')。
トークン =bs_content。探す(('入力' {{'名前''csrf_token'})。['価値']
login_data= {{「ユーザー名」「管理者」'パスワード'「12345」 'csrf_token'トークン}
NS。役職(('http://quotes.toscrape.com/login'login_data)。
home_page=NS。得る((「http://quotes.toscrape.com」)。
印刷((home_page。コンテンツ)。

これにより、ログイン後、Logoutキーワードを検索すると、ページのコンテンツが印刷されます。キーワードは、正常にログインできたことを示すページコンテンツにあります。

コードの各行を見てみましょう。

からリクエスト輸入セッション
からbs4輸入BeautifulSoupなのでbs

上記のコード行は、リクエストライブラリからSessionオブジェクトをインポートし、bs4ライブラリからBeautifulSoupオブジェクトを次のエイリアスを使用してインポートするために使用されます。 bs

セッション(()。 なのでNS:

リクエストセッションは、リクエストのコンテキストを保持する場合に使用されるため、Cookieとそのリクエストセッションのすべての情報を保存できます。

bs_content=bs((サイトコンテンツ 'html.parser')。
トークン =bs_content。探す(('入力' {{'名前''csrf_token'})。['価値']

このコードはBeautifulSoupライブラリを利用しているため、 csrf_token Webページから抽出して、トークン変数に割り当てることができます。 BeautifulSoupを使用してノードからデータを抽出する方法を学ぶことができます。

login_data= {{「ユーザー名」「管理者」'パスワード'「12345」 'csrf_token'トークン}
NS。役職(('http://quotes.toscrape.com/login'login_data)。

ここのコードは、ログインに使用されるパラメーターの辞書を作成します。辞書のキーは次のとおりです。 名前 入力タグの属性と値は 価値 入力タグの属性。

NS 役職 メソッドは、パラメータを使用してPOSTリクエストを送信し、ログインするために使用されます。

home_page=NS。得る((「http://quotes.toscrape.com」)。
印刷((home_page。コンテンツ)。

ログイン後、上記のコード行は、ページから情報を抽出して、ログインが成功したことを示します。

結論

Pythonを使用してWebサイトにログインするプロセスは非常に簡単ですが、Webサイトの設定は同じではないため、一部のサイトは他のサイトよりもログインが難しいことがわかります。ログインの課題を克服するためにできることは他にもあります。

これらすべての中で最も重要なことは、HTML、Requests、BeautifulSoupの知識と、Webブラウザの開発者ツールの[ネットワーク]タブから取得した情報を理解する能力です。