광산과 유사한 문제를 논의하는 몇 가지 주제가 있음을 알리는 것으로 시작하겠습니다. 그러나 제안 된 해결책은 어떤 이유로 든 작동하지 않는 것으로 보입니다. . 또한 스크립트를 사용하여 인터넷에서 파일을 다운로드하는 것이 처음입니다. 지금까지 저는 주로 Python을 Matlab 대체품으로 사용했습니다 (numpy/scipy 사용). 그래서 내가 바보 같은 실수를 저 지르면 나랑 벗겨주세요.파이썬에서 웹에서 .csv 파일 다운로드 (리디렉션 포함)
내 목표 : python을 사용하여 인터넷 데이터베이스 (http://dna.korea.ac.kr/vhot/)에서 많은 .csv 파일을 자동으로 다운로드하고 싶습니다. 필자가 손으로 요구하는 1000 개 이상의 CSV 파일을 다운로드하는 것은 너무 성가기 때문에이 작업을 수행하려고합니다. 데이터베이스는 드롭 다운 메뉴에서 몇 가지 옵션을 선택해야만 UI를 사용하여 액세스 할 수 있습니다. 몇 가지 단계를 거쳐 최종적으로 .csv 파일에 대한 링크로 끝납니다. 드롭 다운 메뉴를 채우고 '검색'을 누르면 드롭 다운 메뉴의 모든 매개 변수가 포함 된 URL을 찾았습니다. 즉, 드롭 다운 메뉴를 사용하는 대신 해당 메뉴를 변경할 수 있습니다. 이는 많은 도움이됩니다. 하나의 예는 다음 URL로 저를 지시, 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의 예 (호출 URL1 수 있습니다)입니다 :
그러나이 직접 CSV 파일을 포함하지만, 나를 위해 '재'(새로운 용어로, 일 표시하지 않습니다 내가 googeling에 의해 발견되면, 내가 틀리면 나를 고쳐라.).
이상한 것. url2에 액세스 할 수 있기 전에 내 브라우저에서 url1을로드해야하는 것으로 보입니다. (같은 날인지, 아니면 시간인지는 모르겠습니다. url2가 오늘 나에게 효과가 없었으며 어제 않았다.) url1에 액세스 한 후에 만 다시 작동 했나요? ...). URL2보다 먼저 url1에 액세스하지 않으면 "결과가 없습니다" 브라우저에서 내 CSV 파일 대신. 아무도 여기서 무슨 일이 일어나는 지 알아?
그러나 내 주요 문제는 내가 파이썬에서 CSV 파일을 저장할 수 없다는 것입니다. 패키지 urllib, urllib2 및 요청을 사용해 보았습니다. 작동시키지 못했습니다. 내가 이해하고있는 것은 요청 패키지가 리디렉션을 처리해야하지만 제대로 작동하지 못했습니다. 다음 웹 페이지에서
솔루션은 나를 위해 일을 나타나지 않습니다 (또는 내가 엉망입니다) :
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-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에 대해 저는 그냥.csv 파일 </script>'
옵션 3은 내가 생각하기에 새로운 리디렉션을 제공합니다.이 기능이 도움이 될 수 있습니까?
아무도 내 문제를 도와 줄 수 있습니까?
r'location.replace의 \ '에 대한 설명 ((. *?) \)''' –
을 도움이 될 것이다. *'어떤 문자와 일치는'?'그것'비 greedy'하게, 그래서 그룹은 안쪽 괄호로 구분되며'location.replace'의 인수 괄호 안에있는 어떤 것과도 일치합니다 - 자바 스크립트가 리디렉션되는 URL 일 것입니다. – ch3ka