Python:批量下载xml文件会返回一个损坏的zip文件

2024-04-25 12:28:21 发布

您现在位置:Python中文网/ 问答频道 /正文

灵感来源于from this post,我试图从一个网站批量下载一堆xml文件:

import urllib2

url='http://ratings.food.gov.uk/open-data/'

f = urllib2.urlopen(url)
data = f.read()
with open("C:\Users\MyName\Desktop\data.zip", "wb") as code:
    code.write(data)

zip文件是在几秒钟内创建的,但是当我试图访问它时,出现了一个错误窗口:

Windows cannot open the folder.
The Compressed (zipped) Folder "C:\Users\MyName\Desktop\data.zip" is invalid.

我做错什么了?你知道吗


Tags: 文件fromurldata网站code批量open
1条回答
网友
1楼 · 发布于 2024-04-25 12:28:21

您没有做任何事情来将此编码为zip文件。如果您选择在一个纯文本编辑器(如记事本)中打开它,它应该显示原始xml。你知道吗

网友
2楼 · 发布于 2024-04-25 12:28:21

您没有打开zip文件中的文件句柄:

import urllib2
from bs4 import BeautifulSoup
import zipfile

url='http://ratings.food.gov.uk/open-data/'

fileurls = []

f = urllib2.urlopen(url)
mainpage = f.read()

soup = BeautifulSoup(mainpage, 'html.parser')

tablewrapper = soup.find(id='openDataStatic')

for table in tablewrapper.find_all('table'):
    for link in table.find_all('a'):
        fileurls.append(link['href'])

with zipfile.ZipFile("data.zip", "w") as code:
    for url in fileurls:
        print('Downloading: %s' % url)
        f = urllib2.urlopen(url)
        data = f.read()
        xmlfilename = url.rsplit('/', 1)[-1]
        code.writestr(xmlfilename, data)

相关问题 更多 >