2011-12-04 87 views
9

我剛剛安裝了scrapy,並遵循其工作原理簡單的dmoz tutorial。我只是查找了python的基本文件處理,並試圖讓抓取工具從文件中讀取URL的列表,但出現了一些錯誤。這可能是錯誤的,但我給了它一個鏡頭。請有人向我展示一個閱讀URL列表到scrapy的例子嗎?提前致謝。Scrapy從文件中讀取網址列表以進行刮取?

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) 

回答

30

你非常接近。

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

...更好的仍然是使用上下文管理器,以確保文件的封閉預期:

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

'readlines方法()'保持在每一行的末尾的換行符。我已經提交了一個編輯文件,用於剝離換行符並關閉文件。 –

4

如果Dmoz的預計只是在列表中文件名,你必須調用剝去線。否則,你會在每個URL的末尾得到一個'\ n'。在Python 2.7

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

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

謝謝,當我從上面的Brians例子運行代碼時,我看到了有關URL格式的錯誤。 scrapy dmoz示例的URL是硬編碼的,並用逗號引用。刪除引號和逗號可以解決問題,現在每行只讀一個。 – Anagio