2017-02-07 5 views
-1

scrapyにすると、forループでcmdline.execute()関数を実行する方法はありますか?以下はその例です。実行しようとすると、スクリプトはの最初の反復の後に停止し、INFO: Closing spider (finished)を示します。スクリプトを壊さずにループに戻すにはどうすればよいですか?最初のスパイダーの後にforループが壊れないようにcmdlineを作成するには?

Execute.py:

from scrapy import cmdline 

links = ["http://quotes.toscrape.com/page/1/", "http://quotes.toscrape.com/page/2/"] 

for link in links: 
    command = "scrapy crawl quotes1 -a source_url=" 
    command += link 
    cmdline.execute(command.split()) 

Spider.py

import scrapy 

class QuotesSpiderS(scrapy.Spider): 
    name = "quotes1" 

    def start_requests(self): 
     urls = [] 
     urls.append("%s" % self.source_url) 
     print(urls) 
     for url in urls: 
      yield scrapy.Request(url=url, callback=self.parse) 

    def parse(self, response): 
     page = response.url.split("/")[-2] 
     filename = 'quotes-%s.html' % page 
     with open(filename, 'wb') as f: 
      f.write(response.body) 
     self.log('Saved file %s' % filename) 

答えて

0

はあなたのスパイダーでstart_urlsattributeへのリンクのリストを移動します。

class QuotesSpiderS(scrapy.Spider): 
    name = "quotes1" 
    start_urls = ["http://quotes.toscrape.com/page/1/", 
        "http://quotes.toscrape.com/page/2/"] 
+0

ご回答ありがとうございます。しかし、コードは動作しません。 –

+0

私は答えを更新しました。たぶんそれはあなたが探しているものです。 –

関連する問題