2011-12-04 49 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