Spiders——抓取和提取结构化数据
Spiders定义了爬取网站的方式,包括爬取的动作(例如:是否跟进链接)以及如何从网页内容中提取结构化数据(提取item)。 换句话说,Spiders就是定义爬取的动作及分析网页的地方。
对爬虫来说,爬取的循环如下所示:
(1)以初始的URL初始化Request,并设置回调函数。当该request下载完毕并返回时,将生成response,并作为参数传给该回调函数。
spider中初始的request是通过调用start_requests()方法来获取的。 在start_requests()方法中读取start_urls中的URL,并以parse为回调函数生成Request。
(2)在回调函数内分析返回的(网页)内容,返回Item对象或者Request或者一个包括二者的可迭代容器。返回的Request对象之后会经过Scrapy处理,下载相应的内容,并调用设置的callback函数(函数可相同)。
(3)在回调函数内,您可以使用选择器(Selectors,也可以使用BeautifulSoup、lxml或者您想用的任何解析器)来分析网页内容,并根据分析的数据生成item。
(4)由spider返回的item将被存到数据库(由某些Item Pipeline处理)或文件中。
虽然该循环对任何类型的spider都多多少少适用,但Scrapy仍然为不同需求提供了多种默认spider。后续将讨论这些spider。
Scrapy框架提供了scrapy.Spider做为爬虫的基类,所有自定义的爬虫必须从这个类派生。scrapy.Spider类的主要属性和方法介绍如下。
- name属性
是定义爬虫名称的字符串。爬虫名称用于Scrapy定位和初始化一个爬虫,所以必须是唯一的。通常,我们使用待爬取网站的域名作为爬虫名称。例如,爬取mywebsite.com的爬虫通常会被命名为mywebsite。
- allowed_domains属性
包含了爬虫允许爬取的域名列表,是可选属性。
- start_urls属性
表示初始URL元组或列表。当没有指定特定的URL时,spider将从该列表中开始爬取。
- __ init__()方法
初始化方法,负责初始化爬虫名称和start_urls列表。
- start_requests(self)方法
负责生成Requests对象,交给Scrapy下载并返回response。
该方法必须返回一个可迭代对象,该对象包含了spider用于爬取的第一个Request,默认是使用start_urls列表中的第一个URL。
- parse(self, response)方法
负责解析response,并返回Item或Requests(需指定回调函数)。返回的Item传给Item pipline持久化,而Requests则交由Scrapy下载,并由指定的回调函数处理(默认parse())。然后持续循环,直到处理完所有的数据为止。
- log(self, message[, level, component])方法
负责发送日志信息。