相关疑难解决方法(0)

requests.get 大文件,下载不完整但找不到错误指示

我正在尝试使用与此答案相同的技术使用请求来下载大文件(即 android cts zip 文件) 。间歇性地无法下载整个文件,但在我尝试解压缩文件之前,我找不到任何表明出现问题的迹象

CTS_URL = 'http://dl.google.com/dl/android/cts/android-cts-8.0_r14-linux_x86-x86.zip'
CTS_ZIP = 'android-cts-8.0_r14-linux_x86-x86.zip'

import requests

req = requests.get(CTS_URL, stream=True)
with open(CTS_ZIP, 'wb') as cts_zip_file:
  for chunk in req.iter_content(chunk_size=4096):
    cts_zip_file.write(chunk)
Run Code Online (Sandbox Code Playgroud)

稍后当我尝试解压缩时出现BadZipFile("File is not a zip file")错误,因为文件尚未完全下载

import zipfile
zipfile.ZipFile(CTS_ZIP)  # fails
Run Code Online (Sandbox Code Playgroud)

但是,我无法从请求对象中得到任何表明出现问题的指示。req.status伊斯兰200国。req.okTrue

req知道出了什么问题吗?目前,我在交互式提示中拥有这些请求对象之一,因此我可以进一步检查它。

python python-3.x python-requests

7
推荐指数
1
解决办法
1874
查看次数

如何使用Python下载文件?

我对 Python 完全陌生,我想通过向服务器发送请求来下载文件。当我在浏览器中输入它时,我看到 CSV 文件已下载,但是当我尝试发送 get 请求时,它没有返回任何内容。例如:

import urllib2
response = urllib2.urlopen('https://publicwww.com/websites/%22google.com%22/?export=csv')
data = response.read()
print 'data: ',  data
Run Code Online (Sandbox Code Playgroud)

它没有显示任何内容,我该如何处理?当我在网上搜索时,所有的问题都是关于如何发送一个 get 请求。我可以发送 get 请求,但我不知道如何下载文件,因为它不在请求的响应中。

我不知道如何找到解决方案。

python get download

6
推荐指数
3
解决办法
1万
查看次数

流式下载大文件与python请求中断

我在python-requests v.2.0.1中有流式下载大文件(大约1.5 GB)的问题

with open("saved.rar",'wb') as file:
    r = session.get(url,stream=True,timeout=3600)
    for chunk in r.iter_content(chunk_size=1024):
        if chunk:
            file.write(chunk)
            file.flush()
Run Code Online (Sandbox Code Playgroud)

我在我的vps上测试了几次,有时下载200mb,500mb或800mb并保存它没有任何错误.它没有达到超时,就像完成下载一样停止.

我下载此文件的主机是稳定的,因为我没有任何问题在浏览器中下载此文件.

有什么方法可以在python请求中下载大文件并且100%确定它的整个文件?

@编辑

我用urllib解决了它,问题只在于请求.无论如何,谢谢你的帮助.

python python-requests

5
推荐指数
1
解决办法
3282
查看次数

大HTML的流解析

我在某些服务器上有一个巨大的 HTML 文件(数十兆字节),我需要定期下载和解析该文件,检测更改。因此,我尝试使用最常用的工具来完成此任务 - requestslxml

我发现的流解析的常见方法与此类似:

def fast_iter(url):
    resp = requests.get(
        url,
        stream=True
    )
    context = etree.iterparse(resp.raw, html=True)
    for event, elem in context:
        print(elem)
        if event == 'end' and elem.tag in TAGS:
            yield elem
        elem.clear()
        while elem.getprevious() is not None:
            if elem.getparent():
                del elem.getparent()[0]
            else:
                break
    del context
Run Code Online (Sandbox Code Playgroud)

但在我的例子中,它不起作用,因为iterparse()变得疯狂并返回一些从未出现在源 HTML 文件中的元素(并且它没有损坏!):

<Element vqoe at 0x7eff9762b448>
<Element jzu at 0x7eff9762b408>
<Element vvu at 0x7eff9762b3c8>
<Element d at 0x7eff9762b388>
<Element s at 0x7eff9762b348>
<Element ss_lt at 0x7eff9762b308> …
Run Code Online (Sandbox Code Playgroud)

html python parsing lxml python-requests

5
推荐指数
1
解决办法
1310
查看次数

有没有办法使用python从网页下载视频?

我想从这个网站上提取视频。 http://www.jpopsuki.tv/video/Meisa-Kuroki---坏女孩/ eec457785fba1b9b35bbf438cf35a7

我可以使用python访问它并获取整个html。但是视频的网址是相对的,即如下所示: <source src="/images/media/eec457785fba1b9bb35481f438cf35a7_1351466328.mp4" type="video/mp4" />

有没有办法使用python将其从网站中提取?

python video

5
推荐指数
1
解决办法
2万
查看次数

使用Python从Internet下载大型CSV文件的进度

我正在阅读McKinney的数据分析书,他已经分享了150MB的文件.尽管在使用请求通过http下载文件时,Progress Bar已经广泛讨论了这个主题,但我发现接受的答案中的代码引发了错误.我是初学者,所以我无法解决这个问题.

我想下载以下文件:

https://raw.githubusercontent.com/wesm/pydata-book/2nd-edition/datasets/fec/P00000001-ALL.csv
Run Code Online (Sandbox Code Playgroud)

这是没有进度条的代码:

DATA_PATH='./Data'
filename = "P00000001-ALL.csv"
url_without_filename = "https://raw.githubusercontent.com/wesm/pydata-book/2nd-edition/datasets/fec"

url_with_filename = url_without_filename + "/" + filename
local_filename = DATA_PATH + '/' + filename

#Write the file on local disk
r = requests.get(url_with_filename)  #without streaming
with open(local_filename, 'w', encoding=r.encoding) as f:
    f.write(r.text)
Run Code Online (Sandbox Code Playgroud)

这很好用,但因为没有进度条,我想知道发生了什么.

这里是从Progress Bar改编的代码,同时通过http下载文件和请求以及如何使用requests.py在python中下载大文件?

#Option 2:
#Write the file on local disk
r = requests.get(url_with_filename, stream=True)  # added stream parameter
total_size = int(r.headers.get('content-length', 0))

with open(local_filename, 'w', encoding=r.encoding) …
Run Code Online (Sandbox Code Playgroud)

python csv python-3.x python-requests

5
推荐指数
1
解决办法
320
查看次数

如何使用 Python 和 Flask 转发 HTTP 范围请求?

我有一个 Flask 应用程序,它将提供一个端点来下载一个大文件。但是,不是从文件系统提供它或即时生成文件,而是必须首先通过 HTTP 从另一台服务器下载该文件。

当然,我可以先向外部服务器执行 GET 请求,完整下载文件并将其存储在文件系统或内存中,然后作为第二步提供原始请求的结果。这看起来像这样(还包括一个基本的身份验证,以表明为什么在较低层上的简单代理是不够的):

#!flask/bin/python
from flask import Flask, jsonify
import os
import requests
from requests.auth import HTTPBasicAuth

app = Flask(__name__)

@app.route('/download')
def download():
    auth = HTTPBasicAuth("some_user", "some_password")
    session = requests.Session()
    session.auth = auth
    response = session.get("http://example.com")
    return response.content

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=1234, debug=True)
Run Code Online (Sandbox Code Playgroud)

但是,这会增加应用程序的延迟和存储要求。而且,即使接收方只需要执行文件的部分下载(即执行 HTTP 范围请求),也必须首先从外部服务器完全获取文件。

有没有更优雅的选择来解决这个问题,即为直接转发到外部服务器的 HTTP 范围请求提供支持?

python http flask

5
推荐指数
1
解决办法
1671
查看次数

从 URL 下载文件并将其保存在 Python 文件夹中

我有很多的URL与文件类型.docx.pdf我想运行一个python脚本从URL下载它们,并存储在文件夹中。这是我为单个文件所做的工作,我会将它们添加到 for 循环中:

response = requests.get('http://wbesite.com/Motivation-Letter.docx')
with open("my_file.docx", 'wb') as f:
    f.write(response.content)
Run Code Online (Sandbox Code Playgroud)

my_file.docx它保存的只有 266 字节并且已损坏,但 URL 很好。

更新:

添加了此代码并且它可以工作,但我想将它保存在一个新文件夹中。

import os
import shutil
import requests

def download_file(url, folder_name):
    local_filename = url.split('/')[-1]
    path = os.path.join("/{}/{}".format(folder_name, local_filename))
    with requests.get(url, stream=True) as r:
        with open(path, 'wb') as f:
            shutil.copyfileobj(r.raw, f)

    return local_filename
Run Code Online (Sandbox Code Playgroud)

python python-requests

4
推荐指数
2
解决办法
2万
查看次数

如何在Python中下载具有默认名称和类型的文件

我是 Python 新手,发现了一个下载数据并将数据保存为 demofile.csv 的代码

   import requests

    url = "https://example.com/demofile"
    r = requests.get(url)

    filename = url.split('/')[-1]

    with open(filename+".csv", "wb") as code:
        code.write(r.content)
Run Code Online (Sandbox Code Playgroud)

现在,我不想明确指定任何名称。 我只希望通过 Python 脚本打开该 URL,并使用默认名称和类型(我们手动下载文件时出现的名称和类型)下载文件。

另外,该文件应该保存在其他目录中,而不是保存 python 代码的文件夹中。

请在这方面提供帮助。

python web-scraping python-requests

3
推荐指数
1
解决办法
6673
查看次数

如何使用 Google colab 将文件下载到 Google Drive?

我一直在使用此代码通过 Google Drive 安装 Colab 并通过粘贴下载 URL 来下载任何文件,但我注意到即使文件大小只有几兆字节也需要很长时间。有什么可以做的来改善它。

**First cell:**
from google.colab import drive
drive.mount('/content/gdrive')
root_path = 'gdrive/My Drive/' 

**Second cell:**
import requests  
file_url = "DOWNLOAD URL HERE"

r = requests.get(file_url, stream = True)  

with open("/content/gdrive/My Drive/FILE NAME HERE", "wb") as file:  
    for block in r.iter_content(chunk_size = 1024): 
         if block:  
             file.write(block)
Run Code Online (Sandbox Code Playgroud)

python downloadfile google-colaboratory

3
推荐指数
1
解决办法
6531
查看次数

如何使用请求下载二进制文件

我正在尝试下载一个二进制文件并将其以其原始名称保存在磁盘 (linux) 上。

有任何想法吗?

import requests

params = {'apikey': 'xxxxxxxxxxxxxxxxxxx', 'hash':'xxxxxxxxxxxxxxxxxxxxxxxxx'}
response = requests.get('https://www.test.com/api/file/download', params=params)
downloaded_file = response.content

if response.status_code == 200:
    with open('/tmp/', 'wb') as f:
        f.write(response.content)
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
9254
查看次数

Python 请求:获取请求文件 (mp4) 的大小(以字节为单位)

我目前正在尝试使用 Python Requests 下载视频,我想先找出它的大小。

import requests

print("STARTING PROGRAM...")

req = requests.get("https://www.source.com/source.mp4")
Run Code Online (Sandbox Code Playgroud)

我想到的唯一方法如下:

for chunk in req.iter_content():
  count+=1
print("FOUND %d CHUNKS" %(count))
Run Code Online (Sandbox Code Playgroud)

但是自从我下载 24 分钟的 mp4 以来,这花了很长时间。有一个更好的方法吗?

python python-requests

0
推荐指数
1
解决办法
1750
查看次数