如何在Scrapy中使用for循环制作网址?

时间:2016-12-23 14:06:03

标签: python scrapy

演示:

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)

在上面的演示中,urls是用start_requests()方法手动编写的,如果有50页,则网址如下:

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

如何使用for循环制作这些网址?

2 个答案:

答案 0 :(得分:3)

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

变量urls将用于for循环,因此,它可以是生成器或容器。 您可以使用list,tuple或generator。

答案 1 :(得分:2)

如果你只想要一个网址列表1..50,试试这个

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

您在开始时使用相同的字符,只想将range(1,51)中的数字转换为字符串然后追加。