Scrapy使用你定义的爬虫的类来从网站中爬取信息。你定义的爬虫的类必须是scrapy.Spider的子类,并且需要定义此子类的初始化请求、如何在页面中爬取所需的链接、如何解析爬取到的页面内容并且提取你需要的数据。
在你的tutorial/spider路径中创建一个名为quotes_spider.py文件,并保存在你的项目中,我们的第一个爬虫的代码如下:
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('Save file %s' % filename)
正如你所见到的,我们的爬虫(Spider)是scrapy.Spider的子类(Spider继承父类),还定义了一些新的属性和方法。
-
name:识别爬虫(名字)。
在一个项目中一个爬虫的名字必须是唯一的,你不能设置同样的爬虫名字在此项目中。 -
start_request():必须返回一个请求(Request)的迭代对象(你也可以返回请求的列表或编写一个生成器函数)爬虫将会从此请求开始爬取。
后续的请求将会从这些初始化请求依次生成。 -
parse():将调用一个方法来处理每个请求所响应的下载。
响应参数是TextResponse的一个实例,该实例不仅保存了页面的内容,而且有助于我们对实例作进一步的操作。
parse()方法函数通常用来解析页面返回的响应,提取所爬取数据并生成字典类型数据,还可以寻找新的链接(URLs)和从链接中创建想的请求(Request)。