Python-web-scraping-form-based-websites
Python Web Scraping-フォームベースのウェブサイト
前の章では、動的なWebサイトのスクレイピングについて説明しました。 この章では、ユーザーベースの入力、つまりフォームベースのWebサイトで機能するWebサイトのスクレイピングを理解しましょう。
前書き
最近、WWW(World Wide Web)は、ユーザーが作成したコンテンツだけでなく、ソーシャルメディアに向かっています。 それでは、ログイン画面を超えるような情報にどのようにアクセスできるのかという疑問が生じます。 このために、フォームとログインを処理する必要があります。
前の章ではHTTP GETメソッドを使用して情報を要求しましたが、この章では、情報をWebサーバーにプッシュして保存および分析するHTTP POSTメソッドを使用します。
ログインフォームとの対話
インターネットでの作業中は、ログインフォームを何度も操作する必要があります。 非常に少数のHTMLフィールド、送信ボタン、アクションページのみを含むように非常に単純な場合もあれば、電子メールのような複雑な追加フィールドがあり、セキュリティ上の理由からcaptchaとともにメッセージを残す場合もあります。
このセクションでは、Pythonリクエストライブラリの助けを借りて、簡単な送信フォームを扱います。
まず、次のようにリクエストライブラリをインポートする必要があります-
import requests
次に、ログインフォームのフィールドに情報を提供する必要があります。
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
次のコード行では、フォームのアクションが発生するURLを提供する必要があります。
r = requests.post(“enter the URL”, data = parameters)
print(r.text)
スクリプトを実行すると、アクションが発生したページのコンテンツが返されます。
フォームで画像を送信する場合、requests.post()を使用すると非常に簡単になります。 あなたは次のPythonスクリプトの助けを借りてそれを理解することができます-
import requests
file = {‘Uploadfile’: open(’C:\Usres\desktop\123.png’,‘rb’)}
r = requests.post(“enter the URL”, files = file)
print(r.text)
WebサーバーからのCookieのロード
Cookieは、Web CookieまたはインターネットCookieと呼ばれることもありますが、Webサイトから送信される小さなデータであり、コンピューターはWebブラウザー内のファイルに保存します。
ログインフォームの処理のコンテキストでは、Cookieには2つのタイプがあります。 1つは前のセクションで扱ったもので、Webサイトに情報を送信できます。2つ目は、Webサイトにアクセスしている間ずっと永続的な「ログイン」状態を維持できるようにします。 2番目の種類のフォームでは、WebサイトはCookieを使用して、ログインしているユーザーとログインしていないユーザーを追跡します。
クッキーは何をしますか?
最近では、ほとんどのWebサイトが追跡にCookieを使用しています。 私たちは次の手順の助けを借りてクッキーの動作を理解することができます-
- ステップ1 *-最初に、サイトはログイン資格情報を認証し、ブラウザのCookieに保存します。 このCookieには通常、サーバーが生成したトークン、タイムアウト、追跡情報が含まれています。
- ステップ2 *-次に、Webサイトは認証の証明としてCookieを使用します。 この認証は、Webサイトにアクセスするたびに常に表示されます。
Cookieは、Webスクレイパーにとって非常に問題があります。WebスクレイパーがCookieを追跡しないと、送信されたフォームが送り返され、次のページでログインしていないように見えるためです。 以下に示すように、Python requests ライブラリを使用してCookieを追跡するのは非常に簡単です-
import requests
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
r = requests.post(“enter the URL”, data = parameters)
上記のコード行では、URLはログインフォームのプロセッサとして機能するページになります。
print(‘The cookie is:’)
print(r.cookies.get_dict())
print(r.text)
上記のスクリプトを実行した後、最後のリクエストの結果からクッキーを取得します。
Cookieには別の問題があり、Webサイトが警告なしにCookieを頻繁に変更することがあります。 このような状況は、次のように* requests.Session()*に対処することができます-
import requests
session = requests.Session()
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
r = session.post(“enter the URL”, data = parameters)
上記のコード行では、URLはログインフォームのプロセッサとして機能するページになります。
print(‘The cookie is:’)
print(r.cookies.get_dict())
print(r.text)
セッションありスクリプトとセッションなしスクリプトの違いを簡単に理解できることに注意してください。
Pythonでフォームを自動化する
このセクションでは、Mechanizeという名前のPythonモジュールを扱います。これにより、作業が削減され、フォームを埋めるプロセスが自動化されます。
機構モジュール
Mechanizeモジュールは、フォームとやり取りするための高レベルのインターフェイスを提供します。 使用を開始する前に、次のコマンドでインストールする必要があります-
pip install mechanize
Python 2.xでのみ機能することに注意してください。
例
この例では、電子メールとパスワードという2つのフィールドを持つログインフォームに入力するプロセスを自動化します-
import mechanize
brwsr = mechanize.Browser()
brwsr.open(Enter the URL of login)
brwsr.select_form(nr = 0)
brwsr['email'] = ‘Enter email’
brwsr['password'] = ‘Enter password’
response = brwsr.submit()
brwsr.submit()
上記のコードは非常に理解しやすいです。 最初に、mechanizeモジュールをインポートしました。 次に、Mechanizeブラウザオブジェクトが作成されました。 次に、ログインURLに移動し、フォームを選択しました。 その後、名前と値がブラウザオブジェクトに直接渡されます。