2015-04-29 64 views
1

我正在使用scrapy进行一些网络扫描,并且遇到了问题。我已经想通了,我可以使用下面的命令行救我scrapy结果到CSV文件:无法读取文件,然后用scrapy将结果写入文件(python)

scrapy crawl spider --set FEED_URI=output.csv --set FEED_FORMAT=csv 

我也知道,我可以通过使用一个起始URL读取文本文件刮以下命令行输入:

scrapy crawl dmoz -a filename=text.txt 

而我在我的蜘蛛的代码是:当我试图同时做这两

class DmozSpider(BaseSpider): 
name = "dmoz" 
allowed_domains = ["ebay.com"] 

def __init__(self, filename=None): 
    if filename: 
     with open(filename, 'r') as f: 
      self.start_urls = f.readlines() 
      print self.start_urls 

我的问题就出现了。我想让我的蜘蛛抓取文本文件中指定的URL,然后将输出写入一个csv文件。下面的命令行不会出于某种原因,该URL被读入(我知道的一个事实),但csv文件不被写入:

scrapy crawl dmoz -a filename=text.txt --set FEED_URI=output.csv --set FEED_FORMAT=csv 

如果有人看到我在做什么错误或有一个解决方法,它将不胜感激。谢谢!

回答

0

如果您有动态启动请求,则应使用start_requests()来产生它们,而不是更改start_urls
这是你应该怎么做:

class DmozSpider(BaseSpider): 
name = "dmoz" 
allowed_domains = ["ebay.com"] 

def start_requests(self): 
    if self.filename: 
     with open(self.filename, 'r') as f: 
      for url in f.readlines(): 
       yield scrapy.Request(url) 

将输出写入到csv文件,你只需要使用-o参数(如果你使用一个有效的扩展,饲料格式将定义文件自动选择):

scrapy crawl dmoz -a filename=text.txt -o output.csv 
相关问题