如何使用python请求url和下载文件夹?

如何使用python请求url和下载文件夹?,python,Python,我是python新手。我正在尝试请求一个URL(由于postgresql数据库中存储了一个id),该URL会向我发送包含多个文件的zip文件夹 import psycopg2 import requests url = "https://myurl/" conn = psycopg2.connect(user="XXX", password="XXX", database="XXX", host="loc

我是python新手。我正在尝试请求一个URL(由于postgresql数据库中存储了一个id),该URL会向我发送包含多个文件的zip文件夹

import psycopg2
import requests

url = "https://myurl/"
conn = psycopg2.connect(user="XXX", password="XXX", database="XXX", host="localhost", port="5432")
print("Successfully connected!")
cur = conn.cursor()
sql ="select id from public.base"
cur.execute(sql)

row = [item[0] for item in cur.fetchall()]

for d in row:
   requests.post(url+d)
requests.post(url+d)正在运行,我有200个响应


但我不知道如何执行以下步骤,也就是说在我的工作区中上载这些zip文件夹…

您可以使用
zipfile
&
io
库,在
extractall
中指定下载位置,如下所示:)


非常感谢你的回答!您的第一个脚本正在工作我只是内存有问题,我将尝试使用64位版本的Python…D Silveiro的脚本正在工作,但下载15小时后出现错误:
raise BadZipFile(“文件不是zip文件”)zipfile.BadZipFile:File不是zip文件
,但实际上下面的url提供了一个zip文件。。。所以我不明白为什么它说它不是一个zip文件…@MrGreedy引入了错误处理错误/无效zip文件,现在应该可以了:)@MrGreedy如果这解决了问题,请在您有时间时将问题标记为已解决:)是的,谢谢您的帮助@D Silveiro:)!
from psycopg2 import (
    connect,
    OpertionalError,
)
from zipfile import (
    BadZipFile,   
    ZipFile,
)
from io import BytesIO
import requests


def download_zip(url):
    response = requests.get(url)
    if response.ok:
        try:
            z = ZipFile(BytesIO(response.content))    
            z.extractall("/path/to/destination_directory")
        except BadZipFile as ex:
            print('Error: {}'.format(ex))

        print('Download succeeded: {}'.format(url))
    else:
        print('Connection failed: {}'.format(url))


def main():
    conn = connect(
        user='XXX',
        password='XXX',
        database='XXX',
        host='localhost',
        port='5432',
    )
    try:
        cur = conn.cursor()
        cur.execute('select id from public.base')
    except OperationalError:
        exit(0)
    
    row = [item[0] for item in cur.fetchall()]
    
    for id in row:
        download_zip('https://myurl/{}'.format(id))
    
    print('Download completed')


if __name__ == '__main__':
    main()