2011-12-04 15 views
9

Sadece terapi kurdum ve bunların çalıştığı basit dmoz tutorial izledim. Python için temel dosya işlemlerini inceledim ve tarayıcının bir dosyadan URL'lerin listesini okumasına çalıştım ama bazı hatalar aldım. Bu muhtemelen yanlış ama bir şans verdim. Birisi bana lütfen URL'lerin bir listesini okumaya dair bir örnek gösterebilir mi? Şimdiden teşekkürler.Scrapy, scrape dosyasından dosyaya URL'leri okuyor?

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) 

cevap

30

Oldukça yakınsınız.

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

... daha iyisi dosyanın beklendiği gibi kapalı sağlamak için bağlam yöneticisini kullanmak olacaktır: Dmoz sadece listede filenames beklediğini olursa

, her üzerine şerit aramak zorunda
with open("urls.txt", "rt") as f: 
    start_urls = [url.strip() for url in f.readlines()] 
+2

'readlines() 'her satırın sonunda yeni satır korur. Yeni satırları şeritleyecek() ve dosyayı kapatacak bir düzenleme sundum. –

4

hat. Aksi takdirde, her bir URL'nin sonunda bir '\ n' alırsınız. Python 2.7

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

Örnek

>>> 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

Teşekkürler, yukarıdaki kod örneğini çalıştırdığımda, URL biçimlendirmesiyle ilgili hataları gördüm. Scrub dmoz örneği, URL'nin sabit kodlamasına ve virgülle tırnak içine alındı. Tırnakları ve virgülleri kaldırmak sorunu çözdü ve şu anda her satırda bir okunıyor. – Anagio