专栏首页喵叔's 专栏Scrapy spider 主要方法

Scrapy spider 主要方法

Spider 类是 Scrapy 中的主要核心类,它定义了爬取网站的规则。 Spider 是循环爬取,它的而爬取步骤是:

  1. start_requests 方法用 start_urls 中的 URL 初始化 Request ,然后将请求返回结果 Response 作为参数传递给 parse 方法;
  2. parse 是回调函数,它分析传递过来的 Response 的内容,从中提取出 Item 对象、 dict 、 Request 或者包含三者的可迭代数据,将 Request 传递给 Scrapy 继续进行下一轮的循环;
  3. parse 使用 selector 分析 Response 提取向所需的数据。

零、 Spider 基本类

所有的爬虫类都必须继承自 Spider 类。他提供了 start_requests 方法的默认实现和读取并请求 start_urls,然后根据返回结果调用 pase 方法。他的常用属性如下:

  1. name:spider 唯一名称, Scrapy 通过 spider 的名称来定位和初始化爬虫;
  2. allowed_domains:可选属性,需要配合中间件 OffsiteMiddleWare 使用,它不会跟进不在域名列表中的域名;
  3. start_urls:当没有指定 URL 时,将会从 start_urls 列表中开始获取页面数据;
  4. custom_settings:可选属性,参数类型是 dict,会覆盖项目设置,必须为 class 。

一、 start_requests

项目启动时会调用 start_requests 方法,然后从 start_urls 列表中依次获取 url 生成 Request ,然后调用回调方法 parse 。这个方法只被调用一次所以我们可以将它写为生成器。

二、 parse

parse 是 Scrapy 默认的回调方法,她负责处理 Response 并返回抓取的数据,获取返回需要跟进的 URL。

三、 Selector

负责提取页面内容,Selector 是一套构建在 lxml 之上的选择器机制,主要通过 xpath 和 css 来提取数据。常用的方法如下:

  1. xpath:传入 xpath 表达式,返回对应的节点列表;
  2. css:传入 css 表达式,返回对应的节点列表;
  3. extract:返回被选择元素的字符串列表;
  4. re:通过正则表达式提取字符串。

tio:选择器可以嵌套使用,例如:

image = response.css("#image")
image_new = image.css("[href*='baidu.com']").extract()

四、总结

上通过简单的描述讲解了 spider 的主要方法,这些方法是我们在开发中经常用到的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第三章--第六节:元祖

    我们很多时候虽然用到的数据序列都是可变的(例如学生列表、网站会员列表),但是在某些时候我们也会需要用到不可变的序列,这样我们就需要元祖了。

    喵叔
  • C#中的坑--浮点类型

    浮点数的精度可变,在一个表达式中只有当除数是2的整数次幂时才能准确无误的计算出结果,其他情况下用浮点类型无法准确的计算出结果。这个听起来很乱对吧,下面我就详细地...

    喵叔
  • SignalR 2.x入门(二):SignalR在MVC5中的使用

    新建一个ASP.NET Web项目,项目类型为MVC,将认证模式改为无身份认证。在程序包管理控制台输入如下语句,安装SignalR

    喵叔
  • 如何查询postgresql 执行过的sql语句[未试验]

    SELECT  procpid,  start,  now() - start AS lap,  current_query  FROM  (SEL...

    双面人
  • 哪个图是机器画的? | 一个新的AI系统通过了图灵测试

    人工智能最大的任务不是分类和识别,而是让机器学会“思考”。 本文展示了MIT在人工智能的最新研究成果,一个新的人工智能系统,它: 1)通过了视觉图灵测试(图灵测...

    数说君
  • Wolfram数据存储库中武汉新型冠状病毒的患者医疗数据

    患者记录包括年龄、性别、位置、发病日期、症状、旅行史、慢性疾病以及出院或死亡日期。

    WolframChina
  • es6新特性分享

    1、字符串查找 es5使用是indexOf() 返回字符第一次出现的位置int值 es6新增了3个方法:includes()/startsWith()/endW...

    Java中文社群_老王
  • Python中的NLP

    自然语言处理(NLP)是数据科学中最有趣的子领域之一,数据科学家越来越期望能够制定涉及利用非结构化文本数据的解决方案。尽管如此,许多应用数据科学家(来自STEM...

    February
  • c语言-转义序列

    landv
  • Ian Goodfellow:我最大的失败是用无监督解决计算机视觉的监督学习问题

    新智元

扫码关注云+社区

领取腾讯云代金券