PythonでWebからデータを抽出するのが初めてです。他の投稿とこのwebpageのおかげで、私はmechanize
というモジュールを使ってフォームにデータを送信する方法を考え出しました。Python:機械化されたフォームにデータを送信した後の.csv結果の抽出
今、私は結果を抽出する方法を見つけることに立ち往生しています。フォームを送信するときにはさまざまな結果がありますが、完全であると思われるCSVファイルにアクセスできるかどうかはわかります。私はあなたがモジュールre
を使用しなければならないと仮定しますが、Python経由でどのように結果をダウンロードしますか?
ジョブを実行した後、csvファイルはここにあります:要約=>結果=>重連鎖テーブルをダウンロードします(「ロードサンプル」をクリックすると、Webページの仕組みを見ることができます)。
import re
import mechanize
br = mechanize.Browser()
br.set_handle_robots(False) # ignore robots
br.set_handle_refresh(False) # can sometimes hang without this
url = 'http://circe.med.uniroma1.it/proABC/index.php'
response = br.open(url)
br.form = list(br.forms())[1]
# Controls can be found by name
control1 = br.form.find_control("light")
# Text controls can be set as a string
br["light"] = "DIQMTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPEDFGSYYCQHFWSTPRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC"
br["heavy"] = "QVQLKESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTLTVSSASTTPPSVFPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPRDC"
# To submit form
response = br.submit()
content = response.read()
# print content
result = re.findall(r"Prob_Heavy.csv", content)
print result
content
を印刷するとき、私のような興味ルックスだライン:
<h2>Results</h2><br>
Predictions for Heavy Chain:
<a href='u17003I9f1/Prob_Heavy.csv'>Download Heavy Chain Table</a><br>
Predictions for Light Chain:
<a href='u17003I9f1/Prob_Light.csv'>Download Light Chain Table</a><br>
は、そこで質問です:どのように私はhref='u17003I9f1/Prob_Heavy.csv'
へのアクセスを取得/ダウンロードするのですか?どちらかそれが最高/ファッショナブルなソリューションですが、その後、私はwget
を使用したい場合
result=re.findall("<a href='([^']*)'>",contents)
わからない:フォーマットは仕事ができるよう、常に同じであれば、それは、正規表現でHTMLを解析するハックだ場合でも
おかげで多くのことを、これは、これまでの回答からではないように見えますが、問題は、取得したファイルが空です。どうすればこの問題を解決できますか?結果はウェブに保存されていないようです。 – Natha
これは残念です。ファイルが見つからなければwgetがクラッシュすることは確かです。だから多分空であるかもしれないし、多分私の答えをChristopherの答え(Python 3の 'urllib 'を使って)と組み合わせて、それが違いを生むかどうかを調べることもできます。 –
それはまさに私がやろうとしていることです。あなたの2つの答えを混ぜると、良い選択肢のように思えます。 – Natha