Spider 类是 Scrapy 中的主要核心类,它定义了爬取网站的规则。 Spider 是循环爬取,它的而爬取步骤是:
- start_requests 方法用 start_urls 中的 URL 初始化 Request ,然后将请求返回结果 Response 作为参数传递给 parse 方法;
- parse 是回调函数,它分析传递过来的 Response 的内容,从中提取出 Item 对象、 dict 、 Request 或者包含三者的可迭代数据,将 Request 传递给 Scrapy 继续进行下一轮的循环;
- parse 使用 selector 分析 Response 提取向所需的数据。
零、 Spider 基本类
所有的爬虫类都必须继承自 Spider 类。他提供了 start_requests 方法的默认实现和读取并请求 start_urls,然后根据返回结果调用 pase 方法。他的常用属性如下:
- name:spider 唯一名称, Scrapy 通过 spider 的名称来定位和初始化爬虫;
- allowed_domains:可选属性,需要配合中间件 OffsiteMiddleWare 使用,它不会跟进不在域名列表中的域名;
- start_urls:当没有指定 URL 时,将会从 start_urls 列表中开始获取页面数据;
- custom_settings:可选属性,参数类型是 dict,会覆盖项目设置,必须为 class 。
一、 start_requests
项目启动时会调用 start_requests 方法,然后从 start_urls 列表中依次获取 url 生成 Request ,然后调用回调方法 parse 。这个方法只被调用一次所以我们可以将它写为生成器。
二、 parse
parse 是 Scrapy 默认的回调方法,她负责处理 Response 并返回抓取的数据,获取返回需要跟进的 URL。
三、 Selector
负责提取页面内容,Selector 是一套构建在 lxml 之上的选择器机制,主要通过 xpath 和 css 来提取数据。常用的方法如下:
- xpath:传入 xpath 表达式,返回对应的节点列表;
- css:传入 css 表达式,返回对应的节点列表;
- extract:返回被选择元素的字符串列表;
- re:通过正则表达式提取字符串。
代码语言:javascript复制tio:选择器可以嵌套使用,例如:
image = response.css("#image")
image_new = image.css("[href*='baidu.com']").extract()
四、总结
上通过简单的描述讲解了 spider 的主要方法,这些方法是我们在开发中经常用到的。