2015-01-08 6 views
5

che lavora su un progetto python e che cosa fa è che guarda l'indice di lifehacker.com, quindi trova tutti i tag con la classe "headline h5 hover-highlight entry- title ", quindi crea file per ogni directory. Ma l'unico problema è che quando lo eseguo, ottengo OSError: [Errno 2] No such file or directory: "/home/root/python/The Sony Smartwatch 3: A Runner's Perspective (Updated: 1/5/2015)""No such file or directory" di os.mkdir

l'aiuto sarebbe bello, grazie!

heres il mio codice atm:

import re 
import os 
import urllib2 
from bs4 import BeautifulSoup 
from mechanize import Browser 

url = "http://lifehacker.com/" 
url_open = urllib2.urlopen(url) 
soup = BeautifulSoup(url_open.read()) 

link = soup.findAll("h1",{"class": "headline h5 hover-highlight entry-title"}) 
file_directory = "/home/root/python/" 

for i in link: 
    os.mkdir(os.path.join(file_directory, str(i.text))) 
    print "Successfully made directory(s)", i.text, "!" 
else: 
    print "The directory", i.text, "either exists, or there was an error!" 
+0

Pensateci: avete caratteri '/' nel nome della vostra directory. –

risposta

4

disinfettare il nome del file. (Se non lo fai, causerai anche problemi di sicurezza, in particolare se non impedisci che le cose inizino con ../).

Questo potrebbe essere semplice come:

safe_name = i.text.replace('/', '_') 
os.mkdir(os.path.join(file_directory, safe_name)) 

Così com'è, il codice sta cercando di creare una directory chiamata 2015), in una directory chiamata 5, in una directory chiamata The Sony Smartwatch 3: A Runner's Perspective (Updated: 1. Poiché nessuno di questi esiste e os.mkdir() non è ricorsivo, si ottiene l'errore in questione. (Se si desidera un'operazione ricorsiva, vedere invece os.makedirs()).

+0

Grazie, questo aiuta molto! –

+0

im ottenere questo errore: UnicodeEncodeError: il codec 'ascii' non può codificare il carattere u '\ u200b' in posizione 0: ordinale non compreso nell'intervallo (128) –

+0

@DANIELREAPSOME, questa è una domanda diversa - e una che è già stata chiesto e risposto qui, quindi non avrai problemi a trovare una risposta cercando. ('str()' non è necessariamente la cosa giusta per le cose che non sono ASCII puro). –