全站爬取1

基于管道的持久化存储

  • 数据解析(爬虫类)

  • 将解析的数据封装到item类型的对象中(爬虫类)

  • 将item提交给管道, yield item(爬虫类)

  • 在管道类的process_item中接手收item对象, 并进行任意形式的持久化存储操作(管道类)

  • 在配置文件中开启管道

  • 细节:

    • 将爬取到的数据进行备份:一个管道类对应一种平台的持久化存储

    • 有多个管道类是否意味着多个管道类都可以接收到爬虫文件提交的item?

      只有优先级最高的管道才会接收到item,其余的管道是从优先级最高的管道类中接收item

基于Spider父类进行全站数据的爬取

  • 全站数据的爬取:将所有页码对应的页面数据进行爬取
  • 手动发送请求 (get): yield scrapy.Request(url, callback)
  • 对yield的总结:
    • 向管道提交item时, yield item
    • 手动发送请求: yield scrapy.Request(url, callback)
  • 手动发送请求 (post): yield scrapy.Request(url, formdata, callback)

scrapy请求传参

  • 作用: 实现深度爬取

  • 使用场景: 使用scrapy爬取的数据没有存在于同一个页面中,

  • 传递item: yield Request(url, callback, meta={'item':item})

  • 接收item: response.meta['item']

提升scrapy爬取数据的效率

在配置文件中进行相关配置即可.

  • 增加并发: 默认scrapy开启的并发线程为32个, 可以适当进行增加. 在settings配置文件中修改CONCURRENT_REQUESTS=100
  • 降低日志级别: 在运行scrapy时, 会有大量日志信息的输出, 为了减少CPU的使用率, 可以设置log输出信息为INFO或ERROR即可, 在配置文件中写入 LOG_LEVEL='INFO'
  • 禁止cookie: 如果不是真的需要cookie, 则在scrapy爬取数据时可以禁止cookie, 从而减少CPU的使用率, 提升爬取效率. 在配置文件中设置COOKIES_ENABLED=False
  • 禁止重试: 对失败的HTTP进行重新请求会减慢爬取速度, 因此可以禁止重试. 在配置文件中设置RETRY_ENABLED=False
  • 减少下载超时: 如果对一个非常慢的链接进行爬取, 减少下载超时可以能让卡住的链接被快速放弃, 提升效率. 在配置文件中设置DOWNLOAD_TIMEOUT=10, 设置超时时间为10秒.

scrapy的中间件

  • 爬虫中间件

  • 下载中间件(重点): 处于引擎和下载器之间

    • 作用: 批量拦截所有的请求和响应
    • 拦截请求, 可以篡改请求的头信息, 进行UA伪装; 或者篡改请求对应的IP代理
    • 拦截响应, 可以篡改响应数据, 或者篡改响应对象
  • selenium在scrapy中的使用流程

    • 在爬虫类中定义一个browser属性, 其实就是实例化的浏览器对象
    • 在爬虫类重写父类的closed(self, spider)方法, 并在该方法中关闭browser
    • 在中间件中进行浏览器自动化操作

图片懒加载

  • 应用到标签的伪属性, 数据捕获的时候要基于伪属性进行.
  • 专门用于二进制数据下载和持久化存储的管道类: ImagePipeline

全站爬取2

CrawlSpider

  • 一种基于scrapy进行全站数据爬取的一种新的技术手段
  • CrawlSpider是Spider的一个子类
    • 连接提取器: LinkExtractor
    • 规则解析器: Rule
  • 使用流程:
    • 新建工程
    • cd 工程中, 新建一个爬虫文件 scrapy genspider -t crawl spider_name www.xxx.com
    • 编写爬虫程序

爬虫---scrapy全站爬取的更多相关文章

  1. scrapy全站爬取拉勾网及CrawSpider介绍

    一.指定模板创建爬虫文件 命令 创建成功后的模板,把http改为https 二.CrawSpider源码介绍 1.官网介绍: 这是用于抓取常规网站的最常用的蜘蛛,因为它通过定义一组规则为跟踪链接提供了 ...

  2. python爬虫scrapy框架——爬取伯乐在线网站文章

    一.前言  1. scrapy依赖包: 二.创建工程 1. 创建scrapy工程: scrapy staratproject ArticleSpider 2. 开始(创建)新的爬虫: cd Artic ...

  3. 爬虫 Scrapy框架 爬取图虫图片并下载

    items.py,根据需求确定自己的数据要求 # -*- coding: utf-8 -*- # Define here the models for your scraped items # # S ...

  4. scrapy架构与目录介绍、scrapy解析数据、配置相关、全站爬取cnblogs数据、存储数据、爬虫中间件、加代理、加header、集成selenium

    今日内容概要 scrapy架构和目录介绍 scrapy解析数据 setting中相关配置 全站爬取cnblgos文章 存储数据 爬虫中间件和下载中间件 加代理,加header,集成selenium 内 ...

  5. Scrapy+selenium爬取简书全站

    Scrapy+selenium爬取简书全站 环境 Ubuntu 18.04 Python 3.8 Scrapy 2.1 爬取内容 文字标题 作者 作者头像 发布日期 内容 文章连接 文章ID 思路 分 ...

  6. 爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式

    爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy ...

  7. scrapy使用爬取多个页面

    scrapy是个好玩的爬虫框架,基本用法就是:输入起始的一堆url,让爬虫去get这些网页,然后parse页面,获取自己喜欢的东西.. 用上去有django的感觉,有settings,有field.还 ...

  8. scrapy_全站爬取

    如何查询scrapy有哪些模版? scrapy genspider –list 如何创建crawl模版? scrapy genspider -t crawl 域名 scrapy genspider - ...

  9. scrapy增量爬取

    ​开始接触爬虫的时候还是初学Python的那会,用的还是request.bs4.pandas,再后面接触scrapy做个一两个爬虫,觉得还是框架好,可惜都没有记录都忘记了,现在做推荐系统需要爬取一定的 ...

随机推荐

  1. 『现学现忘』Docker常用命令 — 19、容器常用命令(一)

    目录 1.新建并启动容器 2.列出当前所有正在运行的容器 3.退出容器 4.启动容器 5.重启容器 6.停止容器 7.强制停止容器 8.删除已停止的容器 有镜像才能创建容器,这是根本前提. 我们下载一 ...

  2. dopamine源码解析之dqn_agent

    目录 epsilon函数 DQNAgent构造函数核心参数 DQNAgent核心函数 tf.make_template 核心数据流图 epsilon函数 linearly_decaying_epsil ...

  3. LOJ6485题解

    应该是经典题之一了. \[[n|k]=\frac 1 n\sum_{i=0}^{n-1}w_n^{ik} \] 有这个就可以算了. \[\sum_{i=0}^n\binom n i x^ia_{i \ ...

  4. 6张图为你分析Kafka Producer 消息缓存模型

    摘要:发送消息的时候, 当Broker挂掉了,消息体还能写入到消息缓存中吗? 本文分享自华为云社区<图解Kafka Producer 消息缓存模型>,作者:石臻臻的杂货铺. 在阅读本文之前 ...

  5. Android 12(S) 图形显示系统 - BufferQueue的工作流程(十)

    题外话 疫情隔离在家,周末还在努力学习的我  ..... 一.前言 上一篇文章中,有基本讲清楚Producer一端的处理逻辑,最后也留下了一个疑问: Consumer是什么时候来消费数据的?他是自己主 ...

  6. CSI 工作原理与JuiceFS CSI Driver 的架构设计详解

    容器存储接口(Container Storage Interface)简称 CSI,CSI 建立了行业标准接口的规范,借助 CSI 容器编排系统(CO)可以将任意存储系统暴露给自己的容器工作负载.Ju ...

  7. 当前分支拉取master的操作 git rebase master

    使用场景 理解rebase 操作步骤 1 git切换至当前开发版本 2 查找需要变基到的branch,不一定是master 3 执行rebase变基 没有冲突的情况 存在冲突的情况 解决冲突 标记冲突 ...

  8. winform 代码生成textbox ,checkbox

    参考地址:https://jingyan.baidu.com/article/380abd0a6b80701d90192cde.html 首先搭建好Winform项目框架后,创建窗体页面后自行布局 这 ...

  9. TCP和UDP协议?

    TCP(Transmission Control Protocol:传输控制协议:面向连接,可靠传输 UDP(User Datagram Protocol):用户数据报协议:面向无连接,不可靠传输

  10. 什么是Spring Cloud Bus?

    spring cloud bus 将分布式的节点用轻量的消息代理连接起来,它可以用于广播配置文件的更改或者服务直接的通讯,也可用于监控. 如果修改了配置文件,发送一次请求,所有的客户端便会重新读取配置 ...