2009-07-15 3 views
1

このページのデータのアーカイブを自動化してデータベースにアップロードします。COM + IEオートメーションを使用してテキストファイルを保存するjavascriptのポストバックに続きます。

これを行うには、他のページでpythonとwin32comを使用しています(社内プロキシの背後にあり、直接ネットアクセスがないため、私はIEを使っています)。私の質問は、下部にある[ここをクリックしてデータをダウンロード]リンクをクリックしたときに返されるCSVデータを抽出して保存することです。このリンクはJavaScriptのポストバックなので、ページ自体をCSV形式に再フォーマットするよりはるかに簡単です。

。もちろん、もっと簡単な選択肢が示唆されていれば、必ずしもPythonを使用するつもりはありませんか?ここで

おかげ

答えて

1

mechanizeライブラリを使用して、より良い方法です。


import mechanize 

b = mechanize.Browser() 
b.set_proxies({'http': 'yourproxy.corporation.com:3128' }) 

b.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')] 
b.open("http://energywatch.natgrid.co.uk/EDP-PublicUI/Public/InstantaneousFlowsIntoNTS.aspx") 

b.select_form(name="form1") 
b.form.find_control(name='__EVENTTARGET').readonly = False 
b.form['__EVENTTARGET'] = 'a1' 

print b.submit().read() 

あなたはそのMechanizeのを指定することができますどのように注(無地urllibを使用しても可能)プロキシサーバーを使用する必要があります。また、ASP.NETのJavaScriptポストバックがどのようにシミュレートされているかに注意してください。

編集:プロキシサーバーがNTLM認証を使用している場合

は、それが問題になる可能性があります。 AFAIK urllib2はNTLM認証を処理しません。 NTLM Authorization Proxy Serverを試すことができます。 readme fileから:


「NTLM Authorization Proxy Server」とは何ですか?

「NTLM認証プロキシサーバーは、」MSプロキシサーバーでとウェブサーバであなたに を認可するプロキシのようなソフトウェア、(ISS特に)であるMS独自のNTLM 認証方式を使用して、それはあなたのクライアントの中にいくつかの値を変更することができます要求ヘッダー が含まれているため、これらの要求はMS IEによって作成されたものと同じように見えます。これはPython 言語で書かれています。 www.python.orgを参照してください。


+0

は、私が試したb.set_proxiesを使用して({ 'のhttp': 'ユーザー:パス@のPROXYSERVER:80'})、その私のset_proxies文字列としてではなく、このエラーを取得: HTTPエラー407:プロキシ認証が必要 これは、これを回避する方法としてCOM + IEを使用した理由です。 この問題を回避するにはどうすればよいでしょうか。あなたの助けをありがとう – Brendan

+0

あなたのプロキシサーバーがNTLM認証を使用している場合、それは問題の可能性があります。私は、NTLM認証プロキシサーバーを使用するように私の答えを更新しました。 NTLMと基本認証の間の変換が行われます。私はトランクのバージョンをダウンロードし、Python 2.5でテストしました。機能するプロキシテスト用にNTLMを使用できるIASプロキシサーバーはありません。 – codeape

関連する問題