1

IISサーバーのページにアクセスしてxmlを取得すると、ブラウザーからクエリパラメーターを使用して(以下の例ではhttpを使用)、ユーザー名とパスワードのポップアップログインダイアログが表示されます(システム標準ダイアログのように見えます/形)。送信すると、データが到着します。xmlページとして。

urllibでこれを処理するにはどうすればよいですか?次の手順を実行しても、uid / pswの入力を求められることはありません。サーバーIDが(正しく)許可されていないことを示すトレースバックが表示されます。Ipythonノートブックでpython2.7を使用する

f = urllib.urlopen("http://www.nalmls.com/SERetsHuntsville/Search.aspx?SearchType=Property&Class=RES&StandardNames=0&Format=COMPACT&Query=(DATE_MODIFIED=2012-09-28T00:00:00%2B)&Limit=10")
s = f.read()
f.close()

ドキュメントへのポインタも高く評価されています!この正確なユースケースは見つかりませんでした。

それが違いを生むなら、私はxmlをcsvに解析することを計画しています。

4

3 に答える 3

7

http認証を扱っています。urllibライブラリをすばやく操作するのは難しいといつも思っています。リクエストPythonパッケージはそれを非常に簡単にします。

url = "http://www.nalmls.com/SERetsHuntsville/Search.aspx?SearchType=Property&Class=RES&StandardNames=0&Format=COMPACT&Query=(DATE_MODIFIED=2012-09-28T00:00:00%2B)&Limit=10"
r = requests.get(url, auth=('user', 'pass'))
page = r.text

そのURLのヘッダーを見ると、ダイジェスト認証を使用していることがわかります。

{'content-length': '1893'、'x-powered-by':'ASP.NET'、'x-aspnet-version': '4.0.30319'、'server':'Microsoft-IIS / 7.5' 、'cache-control':'private'、'date':'Fri、05 Oct 2012 18:20:54 GMT'、'content-type':'text / html; charset = utf-8'、' www-authenticate': ' Digest realm = "Solid Earth"、nonce = "MTAvNS8yMDEyIDE6MjE6MjUgUE0"、opaque = "0000000000000000"、stale = false、algorithm = MD5、qop = "auth"'}

したがって、次のものが必要になります。

from requests.auth import HTTPDigestAuth
r = requests.get(url, auth=HTTPDigestAuth('user', 'pass'))
于 2012-10-05T17:36:55.347 に答える
1

それを行うには多くの方法がありますが、urllib2から始めることをお勧めします。それにはバッテリーが含まれています。

import urllib2, base64

req = urllib2.Request("http://webpage.com//user")
b64str = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % b64str)   
result = urllib2.urlopen(req)

タスクが難しくなった場合は、リクエストbeautifulsoupmechanize、またはseleniumを使用できます。グーグルはあなたにこれらのそれぞれのための十分な例を与えるでしょう、

于 2012-10-05T17:39:41.950 に答える
0

これは、いくつかの方法で実行できます。

  1. urllib/urllib2を使用しrequests、他の人が示唆しているように
  2. Mechanize手動のフォーム入力をシミュレートし、応答を返すために使用します
于 2012-10-05T17:53:52.773 に答える