2011-12-04 13 views
9

Ho appena installato scrapy e ho seguito il loro semplice dmoz tutorial che funziona. Ho appena cercato la gestione dei file di base per Python e ho cercato di convincere il crawler a leggere un elenco di URL da un file, ma ho ricevuto alcuni errori. Questo è probabilmente sbagliato ma ho dato un colpo. Qualcuno potrebbe mostrarmi un esempio di lettura di un elenco di URL in scrapy? Grazie in anticipo.Scrapy ha letto l'elenco di URL dal file per raschiare?

from scrapy.spider import BaseSpider 

class DmozSpider(BaseSpider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    f = open("urls.txt") 
    start_urls = f 

    def parse(self, response): 
     filename = response.url.split("/")[-2] 
     open(filename, 'wb').write(response.body) 

risposta

30

Eri molto vicino.

f = open("urls.txt") 
start_urls = [url.strip() for url in f.readlines()] 
f.close() 

... meglio ancora sarebbe quella di utilizzare il gestore contesto per garantire chiuso del file come previsto:

with open("urls.txt", "rt") as f: 
    start_urls = [url.strip() for url in f.readlines()] 
+2

'readlines()' mantiene i ritorni a capo alla fine di ogni riga. Ho inviato una modifica che eseguirà 'strip()' le nuove righe e chiuderà il file. –

4

Se Dmoz aspetta solo nomi di file nella lista, è necessario chiamare striscia su ogni linea. Altrimenti si ottiene un '\ n' alla fine di ogni URL.

class DmozSpider(BaseSpider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    start_urls = [l.strip() for l in open('urls.txt').readlines()] 

esempio in Python 2,7

>>> open('urls.txt').readlines() 
['http://site.org\n', 'http://example.org\n', 'http://example.com/page\n'] 
>>> [l.strip() for l in open('urls.txt').readlines()] 
['http://site.org', 'http://example.org', 'http://example.com/page'] 
+0

Grazie, quando ho eseguito il codice dall'esempio di Brians sopra ho visto gli errori sulla formattazione dell'URL. L'esempio di scrapy dmoz ha l'hard codificatore dell'URL e tra virgolette e virgole. La rimozione delle virgolette e delle virgole ha risolto il problema e ora vengono letti uno per riga. – Anagio

Problemi correlati