私は、私のような問題について議論するいくつかのトピックがあることを知っていると言い始めるが、提案された解決策は何らかの理由で。 また、スクリプトを使用してインターネットからファイルをダウンロードするのも初めてです。今まで私はMatlabの代わりに(numpy/scipyを使って)Pythonを使っていました。だから私が愚かな間違いをするなら、私と一緒に裸をしてください。PythonでWebから.csvファイルをダウンロードする(リダイレクト付き)
私の目標: インターネットデータベース(http://dna.korea.ac.kr/vhot/)から多数の.csvファイルを自動的にpythonを使用してダウンロードしたいと考えています。私が手作業で必要とする1000以上のcsvファイルをダウンロードするのはあまりにも面倒なので、これを実行したいと思います。データベースは、ドロップダウンメニューから複数のオプションを選択して最終的にいくつかの手順を経て.csvファイルへのリンクを作成するUIを使用してのみアクセスできます。 ドロップダウンメニューに記入して「検索」を押すと、ドロップダウンメニューのすべてのパラメータが表示されます。つまり、ドロップダウンメニューを使用する代わりにそれらを変更することができます。
このウェブサイトのURL例にされ(URL1それを呼び出すことができます):このページで URL1 = http://dna.korea.ac.kr/vhot/search.php?species=Human&selector=drop&mirname=&mirname_drop=hbv-miR-B2RC&pita=on&set=and&miranda_th=-5&rh_th=-10&ts_th=0&mt_th=7.3&pt_th=99999&gene=
私は5 CSV-ファイルを選択することができ、一例としては、次のURLに私を指示します。
しかし、これは直接CSVファイルが含まれていますが、「リダイレクト」(私のために新しい用語、目のように見えるしません。私がgoogelingによって見つけたときに、私が間違っているならばそれを修正してください)。
奇妙なことです。私はurl2にアクセスする前に私のブラウザにurl1をロードしなければならないようです(私はそれが同じ日、または時間でなければならないかどうかわかりません、url2は今日私のために働かなかったし、昨日でした。それは再び働いた...)。私がurl2の前にurl1にアクセスしないと、私のブラウザからの私のcsvファイルの代わりに "no results"が得られます。誰がここで何が起こっているのか知っていますか?
しかし、私の主な問題は、私はPythonからCSVファイルを保存することができないということです。 私はパッケージを使用しようとしました urllib、urllib2と要求私はそれを動作させることはできません。 リクエストパッケージはリダイレクトを処理する必要がありますが、動作させることができませんでした。
次のWebページからのソリューションが私のために動作するように表示されない(または私はめちゃくちゃにしています):
stackoverflow.com/questions/7603044/how-to-download-a-file-returned-間接的-から-HTML-フォーム提出-PYT
stackoverflow.com/questions/9419162/python-download-returned-zip-file-from-url
techniqal.com/blog/2008/07/ 31/python-file-read-write-with-urllib2/
私が試したことのいくつかは次のとおりです:
import urllib2
import csv
import sys
url = 'http://dna.korea.ac.kr/vhot/download.php?mirname=hbv-miR-B2RC&species_filter=species_id+%3D+9606&set=or&gene_filter=&method=targetscan&m_th=-5&rh_th=-10&ts_th=0&mt_th=7.3&pt_th=-10&targetscan=on&miranda=&rnahybrid=µt=&pita='
#1
u = urllib2.urlopen(url)
localFile = open('file.csv', 'w')
localFile.write(u.read())
localFile.close()
#2
req = urllib2.Request(url)
res = urllib2.urlopen(req)
finalurl = res.geturl()
pass
# finalurl = 'http://dna.korea.ac.kr/vhot/download.php?mirname=hbv-miR-B2RC&species_filter=species_id+%3D+9606&set=or&gene_filter=&method=targetscan&m_th=-5&rh_th=-10&ts_th=0&mt_th=7.3&pt_th=-10&targetscan=on&miranda=&rnahybrid=µt=&pita='
#3
import requests
r = requests.get(url)
r.content
pass
#r.content = "< s c r i p t > location.replace('download_send.php?name=qgN9Th&type=targetscan'); </s c r i p t >"
#4
import requests
r = requests.get(url,
allow_redirects=True,
data={'download_open': 'Download', 'format_open': '.csv'})
print r.content
# r.content = "
#5
import urllib
test1 = urllib.urlretrieve(url, "test.csv")
test2 = urllib.urlopen(url)
pass
#2、#3、#4の場合、出力はコードの後に表示されます。 #1と#5のために私はちょうどaを得る。csvファイル</script>'
オプション3は私に新しいリダイレクトを与えてくれると思いますが、これは私を助けますか?
誰かが私の問題を助けることができますか?
'r'location.replace \の説明((。*?)\) '' ' –
に役立つだろうが。*' '、任意の文字に一致?' 'それ以外greedy'なりますので、グループは内側のかっこで区切られ、 'location.replace'の引数カッコ内のものと一致します。これは、javascriptのURLがリダイレクトされることになります。 – ch3ka