2017-02-07 11 views
-1

в scrapy Есть ли способ запустить функцию cmdline.execute() в цикле for? Ниже приведен пример. При попытке выполнить сценарий останавливается после первой итерации for link in links, указывая только INFO: Closing spider (finished). Как я могу заставить скрипт вернуться в цикл без нарушения?Как сделать cmdline in for loop не ломаться после первого Spider?

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 в вашем Spider.

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

Спасибо за ваш ответ. Однако код не работает. –

+0

Я обновил ответ. Возможно, это то, что вы ищете. –