1

ページをスクレイピングしているときに、新しいセッションの作成と維持に問題があります。Requests ライブラリを使用してスクリプト内でセッションを開始し、値を Web フォームに解析しています。ただし、「セッションがタイムアウトしました」ページが返されます。

ここに私の情報源があります:

import requests

session = requests.Session()

params = {'Rctl00$ContentPlaceHolder1$txtName': 'Andrew'}
r = session.post("https://www.searchiqs.com/NYALB/SearchResultsMP.aspx", data=params)
print(r.text)

検索したいURLはこれhttps://www.searchiqs.com/NYALB/SearchAdvancedMP.aspx

「アンドリュー」というパーティ1の名前を探しています。この検索ボックスを保持するフォーム要素が「Rctl00$ContentPlaceHolder1$txtName」であることを確認しました。アクション URL は SearchResultsMP.aspx です。

ブラウザから実行すると、結果の最初のページが表示されます。ターミナルでそれを行うと、セッションの期限切れページが表示されます。何か案は?

4

1 に答える 1

0

まず、requestsPython モジュール内でのセッションの使用に関連する高度なドキュメントを紹介します。

http://docs.python-requests.org/en/master/user/advanced/

sessions.postまた、リダイレクトの呼び出しでベース URL に移動すると、次のようになることにも気付きました。

https://www.searchiqs.com/NYALB/InvalidLogin.aspx?InvLogInCode=OldSession%2007/24/2016%2004:19:37%20AM

ナビゲートする URL を「ハッキング」しました。

https://www.searchiqs.com/NYALB/

...そして、そのページのリンクをクリックすると、 と のプロンプトを含むフォームが表示されることに注意してShow Login Fieldsください。何らかの認証を行っていないため、プログラムで検索を実行しようとすると失敗する可能性があります。完了して忘れている可能性のある以前の認証、またはいくつかの基準に基づいてこれを要求しないサーバー側のアクセス規則のいずれかによって、これへのアクセスが許可されているため、ブラウザーで機能する可能性があります。User IDPassword

これらのコマンドをローカル インタープリターで実行すると、サイトの所有者が認証の失敗を示すステータス コードをわざわざ返さなかったことがわかります。チェックすると、r.status_codeは 200 ですが、あなたr.textのページになりInvalid Loginます。私は ASP については知っていますが、HTTP ステータス コードは実際に何が起こったかを示しているはずだと推測しています。

これは実際には機能しないコードですが、サイトやセッションと対話する方法を示している可能性があります。

import requests

# Create dicts with our login and search data
login_params = {'btnGuestLogin': 'Log+In+as+GUEST'}
search_params = {'ctl00$ContentPlaceHolder1$txtName': 'Andrew'}
full_params = {'btnGuestLogin': 'Log+In+as+GUEST', 'ctl00$ContentPlaceHolder1$txtName': 'Andrew'}


# Create session and add login params
albany_session = requests.session()
albany_session.params = login_params

# Login and confirm login via searching for the 'ASP.NET_SessionId' cookie.
# Use the login page, not the search page first.
albany_session.post('https://www.searchiqs.com/NYALB/LogIn.aspx')
print(albany_session.cookies)

# Prepare a your search request
search_req = requests.Request('POST', 'https://www.searchiqs.com/NYALB/SearchAdvancedMP.aspx',data=search_params)
prepped_search_req = albany_session.prepare_request(search_req)

# Probably should work but does not seem to, for "reasons" unknown to me.
search_response = albany_session.send(prepped_search_req)
print(search_response.text)

別の方法として、Python バインディングを使用した Selenium ブラウザーの自動化を検討することをお勧めします。

http://selenium-python.readthedocs.io/

于 2016-07-24T19:24:55.003 に答える