zoukankan      html  css  js  c++  java
  • scrapy框架

    1 scrapy框架的介绍

      安装

    pip install scrapy

      查看是否安装完成

    scrapy ‐h

      scrapy框架是实现爬虫功能的一个软件结构和功能组件集合

      scrapy爬虫框架的结构

      这5+2的结构, 就是scrapy框架

      主要有三条主要的数据流路径

      第一条路径

        1) Engine通过中间件获得了Spiders发送的请求, 这个请求叫做requests, 相当于是一个url

        2) Engine再转发给scheduler, scheduler主要负责对爬取请求进行调度

      第二条路径

        3) 从Scheduler获得下一个需要爬取的请求, 这是一个真实的请求

        4) Engine获得这个请求之后, 通过中间件, 将请求给 Downloader模块

        5) Downloader爬取请求中相关的网页, 并将爬取的内容封装成一个对象, 这个对象叫response(响应)

        6) Engine再通过中间件将response返回给Spiders

      第三条路径

        7) Spiders处理从Downloader获得的响应, 处理之后会产生两个数据类型, 一个是items(爬取项), 另一个是新的requests

        8) Engine接受到这两数据之后, 将items发送给Item Pipelines, 将requests发送给Scheduler进行调度

      整个框架的入口是Spiders, 出口是Item Pipelines  

      其中Engine, Scheduler, 和Downloader是已经写好的, 不需要实现

      Spiders和Item Pipelines是需要编写的, 但是里面有既定的代码框架, 所以情况是要对某东西进行修改, 这种情况一般叫配置

    2 框架解析

      Engine

        是整个框架的核心

        不需要修改

        控制所有模块之间的数据流

        根据条件触发事件

      Downloader

        根据请求下载网页

        不需要修改

      Scheduler

        对所有请求进行调度管理

      Downloader Middleware

        在Engine和Downloader之间的中间件

        实现用户可配置的控制, 一般是对requests或者responses进行处理和修改的时候使用

        实现 修改, 丢弃, 新增请求或相应

        用户可以编写配置代码

      Spiders

        解析Downloader返回的相应

        产生爬取项

        产生额外的爬取请求

        需要用户编写, 是用户最主要编写的部分

      Item Pipelines

        是以流水线的形式进行处理生成的爬起项

        由一组操作顺序组成, 类似流水线, 每个操作是一个Item Pipelines

        可能包含的操作有: 清理, 检验, 和查重爬取项中的HTML数据, 将数据存储到数据库中

        完全由用户编写

      Spider Middleware

        在Spiders和Engine之间的中间件

        对象求和爬取项的再处理

        修改, 丢弃, 新增请求或者爬取项

      中间件主要是对中间的数据流进行一些操作

    3 scrapy和requests的区别

      相同点:

        都可以进行页面的爬取

        可用性都比较好

        两者都没有处理js, 提交表单, 应对验证码的功能(但是可以扩展)

      不同点

        scrapy是网站级别的爬虫, 是一个框架, 并发性好, 性能较高, 重点在于爬虫结构

        requests是页面级别的爬虫, 是一个库, 并发性不足, 性能不好, 重点在于页面下载, 定制灵活  

    4 常用命令

      命令格式

    scrapy 命令 命令项 命令参数

      startproject 创建一个新工程

      genspider 创建一个爬虫

      settings 获取爬虫配置信息

      crawl 运行一个爬虫

      list 列出工程中所有爬虫

      shell 启动URL调试命令行

      scrapy主要是一个后台的爬虫框架

      之所以提供命令行的方式是因为 命令行的方式更加容易自动化, 适合脚本控制

      本质上, scrapy是给程序员使用的, 使用命令行的方式更加合适

    5 Scrapy的基本使用

    5.1 建立一个工程

      执行命令

    scrapy startproject 工程名字

      这样就会在当前目录下, 创建一个以工程名字命名的文件夹

      在这个目录下有:

      

        scrapy.cfg  -这是部署Scrapy爬虫的配置文件, 将爬虫放在特定的服务器上, 并且配置好相关的操作接口, 在本地上使用不需要配置

        PythonDemo1文件夹  -这是Scrapy框架对应的所有文件所在的目录, 这个名字和工程名字一致

      在文件夹中对应有:

      

        __pycache__文件夹   -这是缓存文件夹

        spiders文件夹  -这是Spiders代码模块目录, 存放工程建立的所有爬虫

        __init__.py  -这是初始化脚本, 用户不需要编写

        items.py  -这是Items代码模板, 需要继承类, 一般不需要编写

        middelwares.py  -这是Middleware代码模块, 需要继承类,  定制的时候需要编写

        pipelines.py  -这是Pipelines代码模板,  需要继承类

        setting.py  -这是Scrapy爬虫的配置文件

      在spiders文件夹下:

      

    5.2 建立一个爬虫

      进入工程文件目录下

      输入命令建立一个爬虫

    Scrapy genspider 爬虫名字 爬取的地址

      建立之后再spiders文件夹中就会多出一个以爬虫名字命名的py文件

      代码如下

      

        其中:

          class类名是 文件名字+Spider

          必须继承 Scrapy.Spider

          name  -是爬虫的名字

          allowed_domains  -是允许的域名, 只能在该域名下爬取网页信息

          start_urls  -爬取页面的初始页面

          parse()方式  -用于处理相应, 解析内容形成字典, 发现新的URL爬取请求, 类似于步骤7的处理

        对于

    start_urls = ['http://www.naidu.com']
    

        这其实是一个简单的写法, 完整的写法是一个生成器, 代码如下

    def start_requests(self):
        urls = [
            'heep://www.baidu.com'
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    5.3 配置爬虫

      可以实现一个基本的功能, 将爬取的页面保存为一个文件

      处理demoSpider.py文件如下

    import scrapy
    
    class DemospiderSpider(scrapy.Spider):
        name = "demoSpider"
        #allowed_domains = ["www.baidu.com"]
        start_urls = ['http://www.baidu.com/']
    
        def parse(self, response):
            fname = response.url.split('/')[-1]
            with open(fname, "wb") as f:
                f.write(response.body)
            self.log("保存成功, 文件名为{}".format(fname))

    5.4 运行爬虫

      同样是在工程目录下, 执行命令运行爬虫

    Scrapy crawl demoSpider

    6 Scrapy数据信息

      基本使用的步骤为

        1) 创建一个工程和Spider模板

        2) 编写Spider

        3) 编写Item Pipeline

        4) 优化配置策略

      使用的基本数据类型

        1) Request类 向网络上提交请求的内容

          class.scrapy.http.Request()

          表示一个http请求

          有Spider生成, 有Downloader执行

          具体的属性和方法

          

        2) Response类 爬取内容的封装类

          class.scrapy.http.Response()

          表示一个http的响应

          有Downloader生成, 有Spider处理

          属性和方法有

          

        3) Item类 Spider产生的信息封装的类      

           class.scrapy.http.Item()

          Item对象表示一个从HTML页面中提取单位信息内容

          由Spider生成, 有Item Pipeline处理

          Item类似字典类型, 可以按照字典类型操作

      提取信息的方法有

        Beautifull Soup

        lxml

        re

        XPath Selector

        CSS Selector

      具体的CSS Selector

        基本格式

    HTML.css( '标签名称::标签属性' ).extract()

    7 Scrapy爬虫实例

      待续..          

      

          

               

     

    人若有恒 无所不成
  • 相关阅读:
    Linux学习32
    Linux学习31-如何查看 linux 系统是centos还是ubuntu,并查看系统版本号
    python测试开发django-124.bootstrap点删除按钮弹确认删除
    python测试开发django-123.bootstrap模态框(modal)垂直居中显示
    python测试开发django-122.bootstrap模态框(modal)学习
    Linux下查询tomcat进程命令
    linux服务器通过X11实现图形化界面显示 1 背景描述
    linux(centos)配置ipv6网卡
    linux 下给网卡添加ipv6、路由
    2021年最新大厂php+go面试题集(1)
  • 原文地址:https://www.cnblogs.com/weihuchao/p/6716623.html
Copyright © 2011-2022 走看看