gpt4 book ai didi

python - 在 python 中从网络(使用重定向)下载 .csv 文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:23 24 4
gpt4 key购买 nike

首先我要说的是,我知道有几个主题讨论的问题与我的类似,但出于某种原因,建议的解决方案似乎对我不起作用。另外,我不熟悉使用脚本从 Internet 下载文件。到目前为止,我主要使用 python 作为 Matlab 的替代品(使用 numpy/scipy)。

我的目标:我想使用 python 从互联网数据库 ( http://dna.korea.ac.kr/vhot/ ) 自动下载很多 .csv 文件。我想这样做是因为手动下载我需要的 1000+ csv 文件太麻烦了。数据库只能使用 UI 访问,您必须从下拉菜单中选择几个选项,才能在一些步骤后最终获得指向 .csv 文件的链接。我发现填写下拉菜单并按“搜索”后获得的网址包含下拉菜单的所有参数。这意味着我可以只更改这些而不是使用下拉菜单,这很有帮助。

这个网站的一个示例 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:

url2 = http://dna.korea.ac.kr/vhot/download.php?mirname=hbv-miR-B2RC&species_filter=species_id+%3D+9606&set=and&gene_filter=&method=pita&m_th=-5&rh_th=-10&ts_th=0&mt_th=7.3&pt_th=99999&targetscan=&miranda=&rnahybrid=&microt=&pita=on

但是,这并不直接包含 csv 文件,而是似乎是一个“重定向”(对我来说是一个新术语,我通过谷歌搜索发现的,所以如果我错了请纠正我)。

一件奇怪的事。在访问 url2 之前,我似乎必须在浏览器中加载 url1(我不知道它是否必须在同一天或同一小时。url2 今天对我不起作用,昨天对我有用。只有在访问 url1 之后它再次工作了吗...)。如果我在 url2 之前不访问 url1,我会从浏览器中得到 “无结果” 而不是我的 csv 文件。有谁知道这里发生了什么?

但是,我的主要问题是我无法从 python 保存 csv 文件。我已经尝试使用包 urllib、urllib2request 但我无法让它工作。根据我的理解,Requests 包应该负责重定向,但我无法让它工作。

以下网页中的解决方案似乎对我不起作用(或者我搞砸了):

stackoverflow.com/questions/7603044/how-to-download-a-file-returned-indirectly-from-html-form-submission-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=&microt=&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=&microt=&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,我只得到一个带有 </script>' 的 .csv 文件。

选项 #3 只是给了我一个新的重定向,我认为这对我有帮助吗?

谁能帮我解决我的问题?

最佳答案

该页面不发送 HTTP 重定向,而是通过 JavaScript 完成重定向。urllibrequests 不处理 javascript,因此它们无法访问下载 url。您必须自己提取最终下载 url,然后使用任何方法打开它。

您可以使用 re 模块和正则表达式提取 URL,例如 r'location.replace\((.*?)\)'

关于python - 在 python 中从网络(使用重定向)下载 .csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10283053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com