当前位置: 首页 > 面试题库 >

使用Python 3从网上下载文件

阎裕
2023-03-14
问题内容

我正在创建一个程序,通过读取同一游戏/应用程序的.jad文件中指定的URL,该程序将从Web服务器下载.jar(java)文件。我正在使用Python 3.2.1

我设法从JAD文件中提取JAR文件的URL(每个JAD文件都包含指向JAR文件的URL),但是正如您所想象的,提取的值是type()字符串。

相关功能如下:

def downloadFile(URL=None):
    import httplib2
    h = httplib2.Http(".cache")
    resp, content = h.request(URL, "GET")
    return content

downloadFile(URL_from_file)

但是,我总是得到一个错误,指出上面函数中的类型必须是字节,而不是字符串。我尝试使用URL.encode(’utf-8’)和字节(URL,encoding =’utf-8’),但是我总是会遇到相同或相似的错误。

因此,基本上我的问题是,当URL以字符串类型存储时,如何从服务器下载文件?


问题答案:

如果要将网页的内容转换为变量,则只需read响应urllib.request.urlopen

import urllib.request
...
url = 'http://example.com/'
response = urllib.request.urlopen(url)
data = response.read()      # a `bytes` object
text = data.decode('utf-8') # a `str`; this step can't be used if data is binary

下载和保存文件的最简单方法是使用以下urllib.request.urlretrieve功能:

import urllib.request
...
# Download the file from `url` and save it locally under `file_name`:
urllib.request.urlretrieve(url, file_name)
import urllib.request
...
# Download the file from `url`, save it in a temporary directory and get the
# path to it (e.g. '/tmp/tmpb48zma.txt') in the `file_name` variable:
file_name, headers = urllib.request.urlretrieve(url)

但是请记住,这urlretrieve被认为是遗留的,并且可能会被弃用(尽管不确定为什么)。

因此,执行此操作的最正确方法是使用urllib.request.urlopen函数返回一个表示HTTP响应的类似文件的对象,然后使用将其复制到实际文件中shutil.copyfileobj。

import urllib.request
import shutil
...
# Download the file from `url` and save it locally under `file_name`:
with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file:
    shutil.copyfileobj(response, out_file)

如果这看起来太复杂,则可能要简化一些并将整个下载存储在一个bytes对象中,然后将其写入文件。但这仅适用于小文件。

import urllib.request
...
# Download the file from `url` and save it locally under `file_name`:
with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file:
    data = response.read() # a `bytes` object
    out_file.write(data)

可以动态提取.gz(可能还有其他格式)压缩数据,但是这种操作可能需要HTTP服务器支持对文件的随机访问。

import urllib.request
import gzip
...
# Read the first 64 bytes of the file inside the .gz archive located at `url`
url = 'http://example.com/something.gz'
with urllib.request.urlopen(url) as response:
    with gzip.GzipFile(fileobj=response) as uncompressed:
        file_header = uncompressed.read(64) # a `bytes` object
        # Or do anything shown above using `uncompressed` instead of `response`.


 类似资料:
  • 我是Python3新手,我正在尝试在登录网站后下载一个文档。 我有2个网址,可以让我立即登录到网页和下载文件。登录后,以下各项: https://www.xxxcompany.com/login.action?loginname=name 这是我的密码。它肯定不起作用,也不会给我打印状态码。我是否误解了一些概念?请帮我解决这个问题。非常感谢你!

  • 我的python3代码: 它将内容保存在metadat.pdf但那不是pdf的真正内容,它是这个html页面: 任何帮助,我如何才能保存文件的真实内容,而不是这个html?它应该是真正的pdf,当我下载它是jsut这个html页面 更新: 当我使用Python会话时,从服务器的一个NSWER:

  • 我需要下载一个文件,每天从网站上的日期将过去。我尝试使用以下代码- 但这是一个错误- Invoke-WebRequest:基础连接已关闭:发送时发生意外错误。在行:3字符:1调用-网络请求-Uri$url-OutFile$输出 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 分类信息:无效操作:(System.网。[Invoke-WebRequest],

  • 问题内容: 我正在尝试从Google驱动器下载文件,我所拥有的只是驱动器的URL。 我已经阅读了有关API和的google API ,其中还需要一些凭据(主要是JSON )。但是我不知道它是如何工作的。 另外,尝试过,但我的情况是从驱动器中获取文件。也尝试过,但没有用。 尝试过的图书馆。它具有良好的驱动上传功能,但没有下载选项。 任何帮助将不胜感激。谢谢。 问题答案: 如果用“驱动器的网址”表示G

  • 问题内容: 我正在寻找一种从网站自动下载文件的方法。 目前,该过程确实是手动且繁重的。我进入网页,输入通行证并登录。它打开一个弹出窗口,在这里我必须单击下载按钮以保存.zip文件。 您对我如何自动执行此任务有任何建议? 我在Windows 7上,主要可以使用MS Dos Batch或python。但是我愿意接受其他想法。 问题答案: 您可以使用Selenium Web驱动程序自动执行下载。您可以在

  • 我正在使用JSCH从SFTP服务器下载文件。我使用单会话,多通道下载文件从不同文件夹位于SFTP。对于这个下载过程,我有一组排定的作业。每项工作将: 每次打开一个新通道()。通道名称:SFTP 使用方法获取要下载的文件总数的大小 如果size(Vector)大于零,则使用下载所有文件 最后关闭打开的通道。 在上面的过程中,大多数时候我得到的文件,找不到或没有这样的文件异常,并没有下载一些文件。 谁