蜘蛛是您定义的类,Scrapy用来从网站(或一组网站)中提取信息。它们必须子类化 scrapy.Spider并定义要生成的初始请求,可选地如何跟踪页面中的链接,以及如何解析下载的页面内容以提取数据。

这是我们第一个蜘蛛的代码。将其保存在 项目目录quotes_spider.py下的tutorial/spiders文件中:
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)

如您所见,我们的Spider子类scrapy.Spider 并定义了一些属性和方法:

  • name:识别蜘蛛。它在项目中必须是唯一的,也就是说,您不能为不同的Spiders设置相同的名称。

  • start_requests():必须返回Spider将开始爬行的可迭代请求(您可以返回请求列表或编写生成器函数)。后续请求将从这些初始请求中连续生成。

  • parse():将调用一个方法来处理为每个请求下载的响应。响应参数是TextResponse保存页面内容的实例,并具有处理它的其他有用方法。

    parse()方法通常解析响应,将抽取的数据提取为dicts,并查找要遵循的新URL并Request从中创建新的request()。