zoukankan      html  css  js  c++  java
  • scrapy 开发流程

    一、Spider 开发流程

      实现一个 Spider 子的过程就像是完成一系列的填空题,Scrapy 框架提出以下问题让用户在Spider 子类中作答:

         1、爬虫从哪个或者那些页面开始爬取?

       2、对于一个已下载的页面,提取其中的那些数据?

       3、爬取完当前页面后,接下来爬取哪个或那些页面?

     上面问题的答案包含了一个爬虫最重要的逻辑,回答了这些问题,一个爬虫也就开发出来了。

    实现一个Spider 只需要完成下面4个步骤:

      步骤 01: 继承 scrapy.Spider

    import scrapy
    
    class BooksSpider(scrapy.Spider):
            ...

      步骤 02:为 Spider 取名;

    import scrapy 
    
    class BooksSpider(scrapy.Spider):
            name = "book"
            ...

      步骤 03:设定起始爬取点;

    class BooksSpider(scrapy.Spider):
            ...
            start_url = ['http://books.toscrape.com/']
            ...

    start_url 同常被实现成一个列表,其中放入所有的其实爬去点的 url (例子中只有一个其实点)。看到这里,大家可能会想,请求页面下载不是一定要提交 Request 对象么? 而我们仅定义了 url 列表,是谁暗中构造并提交了 Request 对象呢? 通过阅读 Spider 基类源码可以找到答案,相关代码如下:

      步骤 04:实现页面解析函数;

        页面解析函数也就是构造 Request 对象是通过 callback 参数指定的回调函数(或默认的 parse 方法)。页面解析函数是实现 Spider 中最核心的部分,它需要完成以下两项工作:

      1、使用选择器提取页面中的数据,将数据封装后 (Item 或字典)提交给 Scrapy 引擎。

      2、使用选择器或 LinkExtractor 提取页面中的连接,用其构造新的Request 对象并提交给 Scrapy 引擎(下载连接页面)。

      一个页面中可能包含多项数据以及多个连接,因此页面解析函数被要求返回一个可迭代对象(通常被实现成一个生成器函数),每次迭代返回一项数据(Item或字典)或一个 Request 对象。

      

  • 相关阅读:
    elasticSearch 查询 bool
    elasticSearch 查询 term
    elasticSearch 查询 match
    python re
    vue day1
    mysql 报错记录
    node.js vue.js 安装
    mysql 插入数据 ,存在跳过
    打印乘法口诀表
    初步使用分支、循环判断数字大小
  • 原文地址:https://www.cnblogs.com/jcjc/p/10876323.html
Copyright © 2011-2022 走看看