2017-05-11 5 views
0

Inspirée from this post, je suis en train de télécharger un tas de xml fichiers par lots d'un site Web:Python: le téléchargement de fichiers xml en batch renvoie un fichier zip endommagé

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) 

Le fichier zip est créé en quelques secondes, mais comme j'essaye d'y accéder, une fenêtre d'erreur apparaît:

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

Qu'est-ce que je fais mal ici?

Répondre

1

vous n'êtes pas dans l'ouverture du fichier poignées du fichier 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) 
+0

Je reconnais quelques fautes de frappe: ('filesnames' /' noms de fichiers'), puis 'filename' dans' f' dans la boucle for, ce qui devrait être 'xmlfile' je suppose. Cependant, ceci a retourné un fichier 'zip' vide. – FaCoffee

+1

vous avez raison, désolé j'ai changé d'approche tout en le tapant, manqué ces bits, et comment avez-vous obtenu la liste des noms de fichiers? quand j'ai regardé le lien que vous avez donné il donne une page html, vous devez obtenir une liste des fichiers xml que vous voulez télécharger en premier –

+0

Exactement! LOL – FaCoffee

1

Vous ne faites rien pour encoder ceci comme fichier zip. Si à la place vous choisissez de l'ouvrir dans un éditeur de texte simple tel que le bloc-notes, il devrait vous montrer le fichier XML brut.

+0

Mais un fichier texte brut dans ce cas contiendrait * tous * les fichiers 'xml' hébergés par le site. C'est plus de 200 fichiers mis ensemble. – FaCoffee

+0

en regardant les données de la requête ce qui retourne est en fait le html qui compose la page. Si vous cherchez à analyser cette page, puis télécharger les fichiers XML, je suggère de regarder une belle soupe. Il y a un tutoriel sur comment l'utiliser [ici] (http://www.pythonforbeginners.com/beautifulsoup/beautifulsoup-4-python). Cela devrait vous permettre d'extraire les références à chacun des fichiers. – tmcnicol