ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-07-11

2021-07-11 21:59:35  阅读:135  来源: 互联网

标签:11 07 管道 爬虫 爬取 item scrapy 2021 解析


今年过去就在小组待了整整一年了,这一年了收获了很多,自己也拥有的更多的责任,自己成为了python负责人,其实自己并没有那么实力去担任这个职务,我自己也知道自己无论是在技术还有其他方面还有很多的里要走,希望自己能够在今后的日子里可以更加的努力,不断向着自己的目标前进

今年学的技术比较多也比较杂,学了Django、算法、数据结构、爬虫

算法

scrapy框架

  • 框架
    是一个集成很多功能并且具有很强通用性的一个项目模板

  • 如何学习框架

    • 专门学习封装各种功能的详细用法
  • 什么是scrapy框架

    • 爬虫中的一个明星框架,
      功能:高性能的的持久性的的储存,异步的数据下载,高性能的数据解析,分布式
  • scrapy框架基本使用

    • 环境的安装
      windows:
      pycharm 中直接就可以安装 pip install scrapy
      创建一个工程:
      scrapy startproject xxx
      cd xxx
      在spiders子目录创建一个爬虫文件

      • scrapy genspider spiderName www.xxxxx.com
        执行工程:
      • scrapy crawl spiderName
    • scrapy数据解析

    • scrapy持久化存储:

      • 基于终端指令:
        • 要求:只可以将parse方法的返回值存储到本地文件中
        • 注意:持久化存储对应的文本文件内类型只可以是(‘json’, ‘jsonlines’, ‘jl’, ‘csv’, ‘xml’
          , ‘marshal’, ‘pickle’)
        • 指令:scrapy crawl qiubaipro -o qiuba.csv
          scrapy crawl XXX(爬虫文件名) -o xxx. (存储的文件名,及文件格式)
        • 好处:简介高效,便捷
        • 缺点:局限性比较强(数据只可以储存到指定后缀的文件中)
      • 基于管道:
        • 编码流程:
          • 数据解析
          • 在item中定义相关属性
          • 将解析的数据封装储存到list类型的对象
          • 将item类型的对象提交给管道进行持久化存储的操作
          • 在管道类的process_item中要将其接受到的item对象中存储的数据进行持久化存储操作
          • 在配置文件中开启管道
        • 好处:
          • 通用性强
      • 面试题
        将爬取到的数据一份存储到本地,一份存储到数据库,如何实现
        • 管道文件中一个管道类对应的是将数据储存到一个平台
        • 爬虫文件提交的item只会给管道文件中第一个被执行的管道类接受
        • process_item中的return item 表示将item传递给下一个即将被执行的管道类
  • 基于Spider的全站数据爬取

    • 就是将网站中某板块下的全部页码对应的页面数据进行爬取
    • 需求:
    • 实现方式:
      • 将所有页面的url添加到start_urls例表中(不推荐,麻烦)
      • 自行手动进行请求发送(推荐)
        • 手动发送请求:
          yield scrapy.Request(url=new_url,callback=self.parse) callback回调函数专门用作于数据解析
  • scrapy五大核心组件:

    • 引擎
      • 用来处理整个数据流处理,触发事务(框架的核心)
    • 调度器
      • 用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回,可以想象成一个URL(抓取网页的地址或者说是链接)
      • 的优先队列,由它类决定下一个抓取的网址是什么,可以去除重复的网址
    • 下载器:
      • 用于下载网页端的内容,并将网页的内容返回给蜘蛛(Scrapy 下载器是建立在twisted这个高效的异步模型)
    • 爬虫
      • 爬虫主要用来干活,用于从特定的网页中提取自己需要的内容,即所谓的实体item,用户也可以从中提取出链接让Scrapy继续爬取下一个页面
    • 项目管道
      • 负责处理爬虫从网页中抽取到的实体,主要的功能是持久化实体,验证实体的有效性,清楚不需要的信息,当当页面被爬虫解析后
      • 将被发送到项目管道,并经过几个特定的次序处理数据
  • Scrapy请求传参:

    • 使用场景:如果要爬取的数据不在同一张页面中,(深度爬取)
    • 需求:爬取Boss直聘
  • 图片数据爬取之ImagesPipeline

    • 基于scrapy爬取字符串类型的数据和爬取图片类型的数据的区别
      • 字符串:只需要用xpath进行解析且提交管道类进行数据持久化存储
      • 图片:xpath解析出来的图片的src的属性值,单独的对图片地址发起请求获取图片二进制类性的数据
    • ImagesPipeline
      • 只需要将img的src的属性进行解析,提交到管道,管道就会对图片的src发送请求获取图片的二进制数据据
    • 需求:爬取站长素材中的高清图片
    • 使用流程:
      • 数据解析 (图片的地址)
      • 将存储图片地址的item提交到指定的管道类
      • 在管道文件中自定制一个基于ImagesPipeline的一个管道类
        • 对item中的图片进行请求操作

          def get_media_requests(self, item, info):
          yield scrapy.Request(item[‘src’])

          定制土图片的名称 指定图片的储存路径需要在strings文件中指定

          def file_path(self, request, response=None, info=None,time=None):
          imgName = request.url.split(’/’)[-1]
          return imgName

          def item_completed(self, results, item, info):
          return item # 返回给下一个即将被执行的管道类

        • 在配置文件中:
          - 指定图片储存的目录:IMAGES_STORE = ‘./imgs chao’
          - 指定开启的管道:自定制的管道类

  • 中间件

    • 下载中间件
      • 位置:引擎和下载器之间
      • 作用;批量拦截到整个工程所有的请求和响应
      • 拦截请求:
        • UA伪装:process_request
        • 代理:process_exception return request
      • 拦截响应:
        • 篡改响应数据,响应对象
        • 需求:爬取网易新闻中的新闻数据(标题和内容)
          • 通过网易新闻的首页解析出五大板块对应的详情页的url(详情页没有动态加载)
          • 每一个板块对应的新闻数据标题都是动态加载出来的
          • 通过解析出每一条新闻详情页的url获取详情页的源码,解析出新闻内容

CrawlSpider 类 Spider的一个子类
- 全站数据爬取的方式
- 基于Spider:手动请求
- 基于CrawlSpider
- CrawlSpider的使用
- 创建一个工程 scrapy startproject xxx
- cd xxx
- 创建爬虫文件(CrawlSpider):
- scrapy genspider -t crawl xxx www.xxx.com
- 连接提取器
- 作用: 根据指定的规则(allow) 进行指定的链接提取
- 规则解释器:
- 作用: 将链接提取器取到的链接进行指定规则的解析(callback)的解析
需求:爬取sun网站中的编号,新闻标题,新闻内容,标号
- 分析爬取的页面没有在同一张页面中
- 1.可以使用链接提取器提取所有的页码链接
- 2.让链接提取器提取所有的新闻详情页的链接

  • 分布式爬虫:
    • 安装一个scrapy-redis组件
    • 原生的scrapy是不可以实现分布式爬虫,必须要让scrapy结合scrapy-redis组件一起实现分布式爬虫
    • 为什么原生的scrapy不可以实现分布式?
      • 调度器不可以被分布式集群共享
      • 管道不可以被分布式集群共享
    • scrapy-redis组件单的作用
      • 可以给原生的scrapy框架提供可以被共享的管道和调度器
    • 实现流程:

标签:11,07,管道,爬虫,爬取,item,scrapy,2021,解析
来源: https://blog.csdn.net/qq_52007481/article/details/118660577

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有