Python3中Scrapy爬虫框架Spider的用法

在Scrapy中,要抓取网站的链接配置、抓取逻辑、解析逻辑里其实都是在Spider中配置的。本文了解一下Spider的基本用法。 

1.Spider运行流程

在实现Scrapy爬虫项目时,最核心的类便是Spider类了,它定义了如何抓取某个的流程和方式。简单来讲,Spider要做的事就是如下两件:

定义抓取网站的动作;

分析爬取下来的网页。

对于Spider类来说,整个爬取循环过程如下所述。

以初始的URL初始化Request,并设置回调函数。当该Request成功请求并返回时,Response生成并作为参数传给该回调函数。

在回调函数内分析返回的网页内容。返回结果有两种形式。一种是解析到的有效结果返回字典或Item对象,它们可以经过处理后(或直接)保存。另一种是解析得到下一个(如下一页)链接,可以利用此链接构造Request并设置新的回调函数,返回Request等待后续调度。

如果返回的是字典或Item对象,我们可通过Feed Exports等组件将返回结果存入到文件。如果设置了Pipeline的话,我们可以Pipeline处理(如过滤、修正等)并保存。

如果返回的是Request,那么Request执行成功得到Response之后,Response会被传递给Request中定义的回调函数,在回调函数中我们可以再次使用选择器来分析新得到的网页内容,并根据分析的数据生成Item。

2.Spider类分析

我们定义的Spider是继承自scrapy.spiders.Spider,这个类是最简单最基本的Spider类,其他Spider必须继承这个类。还有后面一些特殊Spider也都是继承自它。

scrapy.spiders.Spider这个类提供了 start requests()方法的默认实现,读取并请求 start_urls属性,并根据返回的结果调用parse()方法解析结果。它还有如下一些基础属性。
(1)name。爬虫名称,是定义 Spider 名字的字符串。Spider的名字定义了 Scrapy 如何定位并初始化 Spider,它必须是唯一的。不过我们可以生成多个相同的Spider 实例,数量没有限制。 name是 Spider最重要的属性。如果Spider爬取单个网站,一个常见的做法是以该网站的域名名称来命名Spider。例如,Spider爬取mywebsitecom,该Spider通常会被命名为mywebsite。

(2)allowed domains。允许爬取的域名,是可选配置,不在此范围的链接不会被跟进爬取。
(9)start_urls。它是起始URL列表,当我们没有实现start requests()方法时,默认会从这个列表开始抓取。
(3)custom settings。它是一个字典,是专属于本Spider的配置,此设置会覆盖项目全局的设置。此设置必须在初始化前被更新,必须定义成类变量。
(4)crawler。它是由 from_crawler()方法设置的,代表的是本Spider 类对应的 Crawler 对象 Crawler对象包含了很多项目组件,利用它我们可以获取项目的一些配置信息,如最常见的获取项目的设置信息,即Settings。
(5)settings。它是一个Settings对象,利用它我们可以直接获取项目的全局设置变量。除了基础属性,Spider 还有一些常用的方法了基础属性,Spider 还有一些常用的方法
(6)start_requests()。此方法用于生成初始请求,它必须返回一个可迭代对象。此方法会默认使用start_urls 里面的 URL来构造 Request,而且Request是 GET 请求方式。如果我们想在启动时以POST方式访问某个站点,可以直接重写这个方法,发送POST请求时使用FormRequest即可。
(7)parse()。当Response没有指定回调函数时,该方法会默认被调用。它负责处理Response,处理返回结果,并从中提取出想要的数据和下一步的请求,然后返回。该方法需要返回一个包含Request或Item的可迭代对象。
(8)closed()。当 Spider 关闭时,该方法会被调用,在这里一般会定义释放资源的一些操作或其他收尾操作。


3.结语
以上内容可能不太好理解。不过不用担心,后面会有很多使用这些属性和方法的实例。通过这些实例,我们慢慢熟练掌握它们。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhi_neng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值