PythonWebスクレイピング-フォームベースのWebサイト
前の章では、動的なWebサイトをスクレイピングするのを見てきました。この章では、ユーザーベースの入力で機能するWebサイト、つまりフォームベースのWebサイトのスクレイピングについて理解しましょう。
前書き
最近、WWW(World Wide Web)は、ユーザーが作成したコンテンツだけでなく、ソーシャルメディアにも移行しています。では、ログイン画面を超えたような情報にどうやってアクセスできるのかという疑問が生じます。このために、フォームとログインを処理する必要があります。
前の章では、HTTP GETメソッドを使用して情報を要求しましたが、この章では、情報をWebサーバーにプッシュして保存および分析するHTTPPOSTメソッドを使用します。
ログインフォームとのやり取り
インターネットで作業している間、ログインフォームを何度も操作したことがあるはずです。HTMLフィールド、送信ボタン、アクションページがごくわずかであるなど、非常に単純な場合もあれば、複雑でメールなどの追加フィールドがあり、セキュリティ上の理由からキャプチャと一緒にメッセージを残す場合もあります。
このセクションでは、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には2つのタイプがあります。1つは前のセクションで説明しました。これにより、Webサイトに情報を送信でき、2つ目は、Webサイトにアクセスしている間ずっと「ログイン」状態を維持できます。2番目の種類のフォームの場合、WebサイトはCookieを使用して、ログインしているユーザーとログインしていないユーザーを追跡します。
クッキーは何をしますか?
最近、ほとんどのWebサイトは追跡にCookieを使用しています。次の手順でCookieの動作を理解できます-
Step 1−まず、サイトはログイン資格情報を認証し、それをブラウザのCookieに保存します。このCookieには通常、サーバーで生成されたトークン、タイムアウト、および追跡情報が含まれています。
Step 2−次に、Webサイトは認証の証明としてCookieを使用します。この認証は、Webサイトにアクセスするたびに常に表示されます。
WebスクレイパーがCookieを追跡しない場合、送信されたフォームが返送され、次のページでログインしたことがないように見えるため、CookieはWebスクレイパーにとって非常に問題があります。Cookieの追跡は非常に簡単です。 Python requests 以下に示すように、ライブラリ-
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を取得します。
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
Python2.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に移動し、フォームを選択しました。その後、名前と値がブラウザオブジェクトに直接渡されます。