Pythonを使用してWebページにログインし、後で使用するためにCookieを取得する方法


146

Pythonを使用してWebページをダウンロードして解析したいのですが、アクセスするには、いくつかのCookieを設定する必要があります。したがって、最初にhttps経由でWebページにログインする必要があります。ログイン時には、2つのPOSTパラメータ(ユーザー名、パスワード)を/login.phpに送信します。ログインリクエスト中に、レスポンスヘッダーからCookieを取得して保存したいので、リクエストでそれらを使用して、ウェブページ/data.phpをダウンロードします。

Python(できれば2.6)でこれを行うにはどうすればよいですか?可能であれば、組み込みモジュールのみを使用します。

回答:


147
import urllib, urllib2, cookielib

username = 'myuser'
password = 'mypassword'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://www.example.com/login.php', login_data)
resp = opener.open('http://www.example.com/hiddenpage.php')
print resp.read()

resp.read()開きたいページのストレートhtmlでありopener、セッションCookieを使用して任意のページを表示できます。


1
これは安全ですか?これにより、パケットスニッファがプレーンテキストのパスワードを見ることができなくなりますか?Httpsを使用する方が安全でしょうか?
Heartinpiece

2
@Heartinpieceはい、サーバーが提供する場合はHTTPSを使用する必要があります。
ハーレーホルコム

ありがとう...でも、ログインしてsthを投稿したいのですが...このスレッドに投稿データ用にcoockieを設定する方法を想像してみてください。
MLSC 2014年

大きなコードを書く場合は、リクエストライブラリを使用することを強くお勧めします。(個人的な経験)
swapnil jariwala

157

以下は、優れたリクエストライブラリを使用したバージョンです。

from requests import session

payload = {
    'action': 'login',
    'username': USERNAME,
    'password': PASSWORD
}

with session() as c:
    c.post('http://example.com/login.php', data=payload)
    response = c.get('http://example.com/protected_page.php')
    print(response.headers)
    print(response.text)

3
'action': 'login'この例では実際に必要ですか、それともリクエストとともに送信される追加のパラメーターですか?
Ted

1
@テッドその部分は完全に必要です。
Sanghyun Lee 2015

@Ted多分、この特定の例では必須です。私のプログラムでは必要ありませんでした。
Highstaker 2016年

これは私が知っている最高のものです。ウェブサイトごとにデータが必要になる場合があります。
Jithin Pavithran
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.