• Scrapy学习笔记


    一、爬虫框架Scrapy总览

    图片来源于网络

    上图就是整个Scrapy的架构图了,主要包括部分作用如下:

    • Scrapy Engine:爬虫引擎,负责制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。简单来说,就是负责Spiders、ItemPipeline、Downloaders和Scheduler之间的信息传递。
    • Scheduler:调度器,负责接受引擎发送过来的requests请求,并按照一定的方式排列这些请求,等待Scrapy Engine来请求时交给它。
    • Downloader:下载器,负责下载Scrapy Engine发送的所有Requests请求,并将获取的Responses交给Scrapy Engine,由其交给Spiders来处理。
    • Spiders:负责处理所有的Responses,从中分析提取数据,获取Item需要的数据,并将需要跟进的URL提交给Scrapy Engine,由其交给Scheduler。
    • Item Pipeline:项目管道,负责处理Spiders中得到的Item,像去重、持久化等操作。
    • Downloader Middlewares:中间下载器,可以让你自定义扩展下载功能的组件。
    • Spider Middlewares:用于扩展Scrapy Engine和Spiders之间交互的组件。

    Scrapy执行流程:

    1. Scrapy Engine从Spiders获取初始的URL,并将这些request交给Scheduler进行排列。
    2. Scrapy Engine从Scheduler获取处理好的request。
    3. Scrapy Engine将request传递给Downloader,让其下载。
    4. Downloader将下载好的Responses返回给Scrapy Engine。
    5. Scrapy Engine将Responses交给Spiders进行处理,默认传递给Spiders的parse()函数,所以Spiders必须定义这个函数。
    6. Spiders提取出Item需要的数据和接着要爬的URL,并将这些数据和URL交给Scrapy Engine。
    7. Scrapy Engine将数据交给Item Pipeline进行处理,将URL交给Scheduler
    8. 重复步骤2,直到Scheduler中不存在任何requests,程序停止。

    二、一个简单的使用Scrapy的例子:

    目标:爬取Python官网(https://www.python.org/),获得网页的title、url和body,暂时不存储数据。

    1.创建一个Scrapy项目,使用如下命令(项目名为python_project,可以自己更改):

    scrapy startproject python_project

    创建项目后,在命令运行的目录下会产生一个与项目同名的文件夹,其结构大致如下:

    这些文件的作用大致如下:

    • scrapy.cfg:项目的配置文件
    • items.py:用于定义临时存储的数据,所有需要获取的数据都必须在这个文件中有定义。
    • middlewares.py:用于定义中间器,像Spider Middlewares和Downloader Middlewares
    • pipelines.py:用于处理获取的数据,像去重、持久化等。
    • settings.py:项目的配置文件
    • spiders文件夹:用于存放Spiders代码的目录

    2.定义Item:item是保存爬取到的数据的容器,其使用方法与python字典类似,并且踢动额外的保护机制来避免拼写错误导致的未定义字段错误。

    通过创建一个scrapy.Item类,并定义类型为scrapy.Field的类属性来定义一个Item。

    这里,我们需要从网站获取title、url和body,因此在item中定义相应的字段。编辑items.py文件如下:

    import scrapy
    
    class PythonProjectItem(scrapy.Item):
        title = scrapy.Field()
        url = scrapy.Field()
        body = scrapy.Field()

    3.编写Spider:Spider是用户编写用于从网站爬取数据的类,包含了:一个用于下载的初始URL,如何跟进网页中的链接(如域名限制等)以及如何分析网页中的内容,提取生成item的方法。

    为了创建一个Spider,必须继承scrapy.Spider类,并定义以下三个属性或方法:

    • name:用于区别不同的Spider,因此每个Spider的名字必须是唯一的。这样,就可以通过name来直接启动爬虫
    • start_url:定义Spider启动时进行爬取的URL列表,后续的URL则从初始的URL获取的数据中提取。
    • parse( ):每个URL完成下载后生成的Response对象会作为唯一参数传递给该函数。这个方法负责解析返回的数据(response data),提取数据生成item以及生成要进一步处理的URL的Resuest对象。

    这里我们在parse函数中不定义获取URL的实现,只解析要获取的数据。因此这个爬虫只有一个URL可用,爬虫爬取完这个网页便会停止。在spiders目录下新建python_spider.py文件,编辑如下:

  • 相关阅读:
    其他内容
    html标签
    ambari安装集群下安装kafka manager
    greenplum-cc-web4.0监控安装
    ambari安装集群下python连接hbase之安装thrift
    hadoop运维问题记录
    Ambari2.6.0 安装HDP2.6.3(离线安装)
    mongodb 定时备份
    linux top命令详解
    Sublime Text3配置Python环境
  • 原文地址:https://www.cnblogs.com/jxc321/p/9322728.html
Copyright © 2020-2023  润新知