web-dev-qa-db-ja.com

Python-ログインして特定のファイルをウェブサイトからダウンロード

Webサイトにログインして特定のファイルをダウンロードしようとする試みが失敗しました。

具体的には、このウェブサイトにログインしています http://www.gaez.iiasa.ac.at/w/ctrl?_flow=Vwr&_view=Welcome&fieldmain=main_lr_lco_cult&idPS=0&idAS=0&idFS=

ファイルをダウンロードしてExcelまたはcsvとして保存する前に特定の変数とパラメーターを選択できるようにするためです。

特に、強調表示された入力を切り替えたい inputs 、「視覚化とダウンロード」ボタンでファイルをダウンロードする前に、作物のタイプ、給水、入力レベル、期間、および地理的領域を選択する前。

たとえば、小麦(作物)、天水(給水)、高(入力レベル)、1961-1990(期間、ベースライン)、アメリカ合衆国(地理的領域)のデータを取得したいとします。次に、Excelファイルとして保存します。

これはこれまでのところ私のコードです:

# Import library
import requests

# Define url, username, and password
url = 'http://www.gaez.iiasa.ac.at/w/ctrl?_flow=Vwr&_view=Welcome&fieldmain=main_lr_lco_cult&idPS=0&idAS=0&idFS=0'
user, password = 'Username', 'Password'
resp = requests.get(url, auth=(user, password))

おそらく私は、簡単で実行可能な解決策を見るために、プロセス全体の溝に染み込んでいますが、どんな助けも大いに感謝しています。

7
user4679594

リンクしたWebサイトはHTTP POSTからのログインを使用しています。コードには次のものが含まれます。

resp = requests.get(url, auth=(user, password))

基本的なhttp認証を使用します http://docs.python-requests.org/en/master/user/authentication/#basic-authentication

このサイトにログインするには、2つのものが必要です。

  • 永続的なセッションCookie
  • HTTP POSTフォームURLへのログイン要求

まず、サーバーからCookieを保持するセッションオブジェクトを作成しましょう http://docs.python-requests.org/en/master/user/advanced/#session-objects

s = requests.Session()

次に、GETリクエストを使用してサイトにアクセスする必要があります。これによりCookieが生成されます(サーバーはセッションのCookieを送信します)。

s.get(site_url)

最後のステップは、サイトへのログインです。 FirebugまたはChrome Developer Console(使用するブラウザに応じて))を使用して、送信する必要があるフィールドを確認できます([ネットワーク]タブに移動します)。

s.post(site_url, data={'_username': 'user', '_password': 'pass'})

この2つのフィールド(_username、_password)はあなたのサイトでは有効なようですが、POSTリクエスト中に送信されたデータを調べたところ、さらに多くのフィールドがありました。必要。

その後、認証されます。次に、ダウンロードしたいファイルのURLにアクセスします。

s.get(file_url)

指定したリンクには、強調表示したいオプションにおそらく関連しているさまざまなオプションを含むクエリ文字列が含まれています。これを使用して、必要なオプションでファイルをダウンロードできます。

警告ノート

このサイトはHTTPSセキュア接続を使用していないことに注意してください。提供する資格情報は暗号化されずにインターネットを通過するため、それらを表示してはいけない人に見られる可能性があります。

16