Spider
Spider类定义了如何爬取某个(或某些)网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。 换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。
class scrapy.Spider
是最基本的类,所有编写的爬虫必须继承这个类。
主要用到的函数及调用顺序为:
__init__()
: 初始化爬虫名字和start_urls列表
start_requests() 调用make_requests_from url()
:生成Requests对象交给Scrapy下载并返回response
parse()
: 解析response,并返回Item或Requests(需指定回调函数)。Item传给Item pipline持久化 , 而Requests交由Scrapy下载,并由指定的回调函数处理(默认parse()),一直进行循环,直到处理完所有的数据为止。
1 | # 所有爬虫的基类,用户定义的爬虫必须从这个类继承 |
主要属性和方法
- name:爬虫名称,是定义 Spider 名字的字符串,Spider的名字定义了Scrapy如何定位(并初始化)Spider,所以其必须是唯一的。
- allowed_domains:允许爬取的域名,是可选配置,不在此范围的链接不会被跟进爬取。
- start_urls:是起始URL列表,当我们没有实现start_requests()方法时,默认会从这个列表开始抓取。
- custom_settings:是一个字典,是专属于本 Spider 的配置,此设置会覆盖项目全局的设置。此设置必须在初始化前被更新,必须定义成类变量。
- crawler:它是由 from_crawler()方法设置的,代表的是本 Spider 类对应的 Crawler 对象。Crawler对象包含了很多项目组件,利用它我们可以获取项目的一些配置信息,如最常见的获取项目的设置信息,即Settings
- settings:一个Settings对象,利用它我们可以直接获取项目的全局设置变量。除了基础属性,Spider还有一些常用的方法。
- start_requests():此方法用于生成初始请求,它必须返回一个可迭代对象。此方法会默认使用start_urls里面的URL来构造Request,而且Request是GET请求方式。如果我们想在启动时以POST方式访问某个站点,可以直接重写这个方法,发送POST请求时使用FormRequest
- parse():当请求url返回网页没有指定回调函数时,默认的Request对象回调函数。用来处理网页返回的Response,处理返回结果,并从中提取出想要的数据和下一步的请求,然后返回。该方法需要返回一个包含Request或Item的可迭代对象。
- closed():当Spider关闭时,该方法会被调用,在这里一般会定义释放资源的一些操作或其他收尾操作。
实例:腾讯招聘网自动翻页采集
- 创建一个新的爬虫:
1 | scrapy genspider tencent 'tencent.com' |
- 编写items.py
1 | class TencentItem(scrapy.Item): |
- 编写tencent.py
1 | import re |
- 编写pipeline.py文件
1 | import json |
- 在 setting.py 里设置ITEM_PIPELINES
1 | ITEM_PIPELINES = { |
小结
parse()方法的工作机制:
1 | 1. 因为使用的yield,而不是return。parse函数将会被当做一个生成器使用。scrapy会逐一获取parse方法中生成的结果,并判断该结果是一个什么样的类型; |