Spider 类定义了如何爬取某个(或某些)网站,包括爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。换句话说,Spider 就是定义爬取的动作及分析某个网页(或者是多个网页)的地方。
定义爬虫是我们最重要的任务,而 scrapy.Spider 是最基本的类,所有我们编写的爬虫必须继承自该类。
下面先来看一个非常简单的例子,该例子仅爬取两级页面来获得需要的数据。爬虫的种子页面是 http://stackoverflow.com/questions?sort=votes,其上显示被点赞最多的话题,每页默认显示 15 项。但是话题的详细信息并不在这个页面上,而是在其链接所指向的二级页面上。
所以为了得到我们的数据,需要进行两步操作:
打开种子页面,读取出链接信息。
打开被链接页面,读取需要的内容。
由于这些数据是动态的,所以读者看到的数据也许和下面显示内容的略有不同。
#encoding: utf-8
import scrapy # 引入scrapy模块
# 定义自己的爬虫, 必须继承自scrapy.Spider
class StackOverflowSpider(scrapy.Spider):
name = 'stackoverflow' # 爬虫的名字
# 种子地址
start_urls = ['http://stackoverflow.com/questions?sort=votes']
# 回调函数1,用来解析列表页面
def parse(self, response):
for href in resp