2016-12-23 6 views
-2

Demo:Wie URLs mit einer For-Schleife in Scrapy zu machen?

import scrapy 


class QuotesSpider(scrapy.Spider): 
    name = "quotes" 

    def start_requests(self): 
     urls = [ 
      'http://quotes.toscrape.com/page/1/', 
      'http://quotes.toscrape.com/page/2/', 
     ] 
     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) 

In dieser Demo oben urls manuell in start_requests() Methode geschrieben werden, wenn es 50 Seiten sind, sind die URLs wie folgt aus:

http://www.example.com/page/1 
http://www.example.com/page/2 
... 
... 
http://www.example.com/page/50 

Wie diese URLs mit einem machen für die Schleife?

Antwort

3
urls = ('http://www.example.com/page/{}'.format(i) for i in range(1,51)) 

Die Variable urls wird in einer for-Schleife verwendet werden, so kann es ein Generator oder ein Container sein. Sie können Liste, Tupel oder Generator verwenden.

2

Wenn Sie nur eine Liste von URLs 1..50 wollen, versuchen Sie diese

urls = ['http://www.example.com/page/' + str(i) for i in range(1, 51)] 

Sie haben die gleichen Zeichen am Anfang und wollen nur die Zahlen in range(1,51) in Strings konvertieren und hängen dann.

Verwandte Themen