scrapy框架讲解

2023-11-06

简介:

Scrapy是一个基于Python的开源异步爬虫框架,它被广泛用于从网页或App中,提取数据并将其保存到本地或数据库。由2.8版本以后提供了 http2.0协议的爬虫支持。

扩展:

scrapy是基于twisted框架开发而来,twisted是一个流行的事件驱动,使用了一种非阻塞(即异步)的代码实现并发,Scrapy之所以能实现异步,得益于twisted框架。

安装命令

# 安装命令
pip install scrapy
# 查看安装结果命令
scrapy --v

 显示一下版本页面表示安装成功

 scrapy中文官网

Scrapy一目了然 — Scrapy 2.5.0 文档

 一、Scrapy的五大核心组件

(1) 调度器(Scheduler)

        用来接受引擎发过来的请求,并按照一定的方式进行整理排列,放到队列中,当引擎需要时,交还给引擎。可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址。

(2) 下载器(Downloader)

        负责下载引擎发送的所有Request请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理。Scrapy下载器是建立在twisted这个高效的异步模型上的。

(3) 爬虫(Spider)

        用户根据自己的需求,编写程序,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。跟进的URL提交给引擎,再次进入Scheduler(调度器)。

(4) 管道(Pipelines)

        用于接收网络爬虫传过来的数据,以便做进一步处理。例如验证实体的有效性、清除不需要的信息、存入数据库(持久化实体)、存入文本文件等。

(5) 引擎(Engine)

        框架核心,用来处理整个系统的数据流的流动, 触发事务(判断是何种数据流,然后再调用相应的方法)。也就是负责爬虫、管道、下载器、调度器中间的通讯,信号、数据传递等,所以被称为框架的核心。 引擎相当于计算机的CPU,它控制着整个流程。

二、Scrapy框架的工作原理如下:

1.引擎会向spider索要url

2.引擎拿到url地址后会分发给调度器入队列,在调度器中会进行去重等处理

3.调度器会把整理好的url队列分发给下载器,进行下载数据,并把相应内容返回给spider。

       下载器中间件,可以把他理解成是引擎与下载器中间的一个钩子(hook)插件,在这里我们可以修改和添加user-agent、代理ip、cookie、等等模拟浏览器环境行为来对抗各种反爬虫)还可以做异常的捕获与重试等...

4.spider拿到响应后,提取相应并生成item对象分发给管道进行持久化存储。

       spider中间件,可以把他理解成是引擎与下载器中间的一个钩子(hook)插件,处理引擎传递给爬虫的响应或者处理爬虫传递给引擎的请求等。

例如,当运行到 yield scrapy.Request()或者 yield item 的时候,spider中间件会被触发。

5.pipelines管道拿到数据后可以持久化存储到数据库、表格等

三、创建scrapy框架

scrapy startproject BaiDu
cd BaiDu
scrapy genspider baidu www.baidu.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scrapy框架讲解 的相关文章

  • 具有多个输入的kerasvalidation_data

    我尝试使用validation data方法 但是有问题 model fit X macd train X rsi train X ema train Y train sample weight sample weight validati
  • 如何读取通过追加行不断更新的文件?

    在我的终端中我正在运行 curl user dhelm 12345 https stream twitter com 1 1 statuses sample json gt raw data txt curl 的输出是实时流式 Twitte
  • 如何在 kubernetes 上使多个 pod 相互通信

    我是 Kubernetes 新手 我正在尝试通过 microk8s 将应用程序部署到 Kubernetes 该应用程序包含Python Flask后端 Angular前端 Redis和MySQL数据库 我将映像部署在多个 Pod 中 状态显
  • 查找 python 数据框中每行的最高值

    我想找到每行中的最高值并返回 python 中该值的列标题 例如 我想找到每行的前两个 df A B C D 5 9 8 2 4 1 2 3 我希望我的输出看起来像这样 df B C A D 您可以使用字典理解来生成largest n数据帧
  • 使用 Python 的 optparse 模块时如何遵守 PEP 257 文档字符串?

    根据PEP 257 http www python org dev peps pep 0257 multi line docstrings命令行脚本的文档字符串应该是它的使用消息 脚本的文档字符串 a 独立程序 应该可用 作为其 使用 消息
  • Python pandas:删除字符串中分隔符之后的所有内容

    我有数据框 其中包含例如 vendor a ProductA vendor b ProductA vendor a Productb 我需要删除所有内容 包括 两个 以便我最终得到 vendor a vendor b vendor a 我尝
  • [python]没有属性“TessBaseAPI”

    当我编译代码时出现错误 import tessercat api tesseract TessBaseAPI 错误是 AttributeError 模块 对象没有属性 TessBaseAPI 我已经安装了tesseract via pip
  • SQLAlchemy:检查给定值是否在列表中

    问题 在 PostgreSQL 中 检查某个字段是否在给定列表中是使用IN操作员 SELECT FROM stars WHERE star type IN Nova Planet SQLAlchemy 的等价物是什么INSQL查询 我尝试过
  • 检查多维 numpy 数组的所有边是否都是零数组

    n 维数组有 2n 个边 1 维数组有 2 个端点 2 维数组有 4 个边或边 3 维数组有 6 个 2 维面 4 维数组有 8 个边 ETC 这类似于抽象 n 维立方体发生的情况 我想检查 n 维数组的所有边是否仅由零组成 以下是边由零组
  • 为什么我不能“string”.print()?

    我的理解print 在 Python 和 Ruby 以及其他语言 中 它是字符串 或其他类型 上的方法 因为它的语法非常常用 打印 嗨 works 那么为什么不呢 hi print 在 Python 中或 hi print在红宝石工作 当你
  • 比较两个文本文件并计算差异

    我一直在尝试在Python中比较两个文本文件 本质上我想打开它们并一次比较一个字符 如果字符不同 则向计数器添加1 然后显示该值 这是我到目前为止所拥有的 usr bin env python diff 0 import random im
  • 如何在返回的 AJAX 调用上使用 django 模板标签?

    我有一个简单的 AJAX 脚本 它在名为的搜索字段中获取输入的字符串AJAXBox并调用一个视图函数 该函数使用过滤器查询数据库并返回与输入参数匹配的所有 User 对象的查询集 当我使用 django 模板标签迭代查询集时 它不起作用 我
  • 什么时候用==,什么时候用is?

    奇怪的是 gt gt gt a 123 gt gt gt b 123 gt gt gt a is b True gt gt gt a 123 gt gt gt b 123 gt gt gt a is b False Seems a is b
  • 如何将一串Python代码编译成一个可以调用函数的模块?

    在 Python 中 我有一串 Python 源代码 其中包含以下函数 mySrc def foo print foo def bar print bar 我想将这个字符串编译成某种形式类似模块的对象这样我就可以调用代码中包含的函数 这是我
  • 将查询参数添加到 URL

    我正在尝试自动从网站下载数据 我需要将动态参数传递到每天更改的站点 html 的结构是表格而不是表单 如何传递参数并从 url 获取结果 这是我尝试过的 它需要在 python 2 7 中 import urllib url https d
  • 在Python中确定句子中2个单词之间的邻近度

    我需要确定 Python 句子中两个单词之间的接近度 例如 在下面的句子中 the foo and the bar is foo bar 我想确定单词之间的距离foo and bar 确定之间出现的单词数foo and bar 请注意 该词
  • django 中的“管理器”是什么?

    我已经阅读了Django官方中的定义文档 https docs djangoproject com en dev topics db managers 我仍然对什么感到困惑Manager does 文档说它们允许您操作数据库表 模型 但我仍
  • Python:使用for循环更改变量后缀

    我知道这个问题被问了很多 但到目前为止我无法使用 理解答案 我想改变for循环中变量的后缀 我尝试了 stackoverflow 搜索提供的所有答案 但很难理解提问者经常提出的具体代码 因此 为了清楚起见 我使用一个简单的示例 这并不意味着
  • 无法在 Windows 服务器上使 SVN 预提交脚本失败

    我正在编写一个 SVN pre commit bat 文件 该文件调用 Python 脚本来查询我们的问题跟踪系统 以确定用户提供的问题跟踪 ID 是否处于正确的状态 例如 打开 状态 并与正确的关联项目 SVN 服务器运行 Windows
  • 为什么 tesseract 无法从这个简单的图像中读取文本?

    我在 pytesseract 上阅读了大量的帖子 但我无法让它从一个简单的图像中读取文本 它返回一个空字符串 这是图像 我尝试过缩放它 灰度化它 调整对比度 阈值 模糊 以及其他帖子中所说的一切 但我的问题是我不知道 OCR 想要更好地工作

随机推荐

  • WSDL(Web服务描述语言)详细解析

    WSDL Web Services Description Language Web服务描述语言 是一种XML Application 他将Web服务描述定义为一组服务访问点 客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服
  • Java:珠穆朗玛峰

    需求 世界最高山峰是珠穆朗玛峰 8844 43米 8844430毫米 假如我有一张足够大的纸 它的厚度是0 1毫米 请问 我折叠多少次 可以折成珠穆朗玛峰的高度 分析 1 因为要反复折叠 所以要使用循环 但是不知道要折叠多少次 这种情况更适
  • 记一次spring循环依赖

    问题 spring循环依赖 场景 A注入B B注入A 按理来说spring是支持的处理 不会出现循环依赖的问题 但是 除了相互注入外 项目还是使用的AOP切面打印日志 使用了代理 问题就是出现在这里 源码 Whether to resort
  • 简单的整理一下Vue3的组合API

    1 Vue3的生态和优势 社区生态 逐步完善 整体优化 性能优化 TS支持优化 组合式API加持 市场使用 部分技术选型激进的公司已经在生产环境使用了vue3 社区生态 组件 插件 名称 官方地址 简介 ant design vue Ant
  • Eclipse远程调式

    JVM调式选项 Xdebug Xrunjdwp transport dt socket address 8000 server y suspend y 请务必写在一行
  • matplotlib画图

    画出第一个基本图像 import matplotlib pyplot as plt import numpy as np x np linspace 1 1 50 y x 2 1 plt plot x y plt show 用两个窗口画出两
  • java 算法结构----单链表

    相关基础知识补充 指针 表示一个数据元素逻辑意义上的存储位置 Java语言用通过对象的引用来表示指针 通过把新创建对象赋值给一个对象引用 即是让该对象引用表示 或指向 了所创建的对象 链式存储结构是基于指针实现的 我们把一个数据元素和一个指
  • 3分钟教你子网划分--(内含习题讲解)

    文章目录 一 IPV4 1 IP地址 2 IPV4地址组成 3 IP地址分类 二 子网掩码 1 网络地址与广播地址 2 子网划分 一 IPV4 1 IP地址 IP地址分为IPV4和IPV6 但现在目前大家所常用的为IPV4 IPV4是由32
  • GPU基数排序(CUDA radix sort)

    GPU基数排序 CUDA radix sort 引言 基数排序是具有固定迭代次数的排序算法 其通过对最低位到最高位的一一比较 对数值排序 本文将介绍基数排序的并行实现方法 主要包括并行基数排序 并行合并 并行归约这三种算法 本文全部代码连接
  • CentOS7.x 安装 openssh8.4、openssl1.1.1

    1 升级准备工作 1 1 查看系统版本和ssh版本 cat etc redhat release ssh V 1 2 需要将openssh升级到最新版本 直接yum安装即可 yum install openssh y 可以看已经升级到7 4
  • GCC+makefile+GDB工具

    GCC编译器 以c文件main c sub c和add c和头文件my fun h为例 代码为 1 main c include
  • 西门子200系列PLC学习课程大纲(课程筹备中)

    西门子200系列PLC学习课程大纲如下表所示 共106课 关注我 让你从菜鸟变大神 第1课 西门子200PLC概述 S7 200 PLC新特性是什么 第2课 S7 200 PLC的CPU模块介绍 第3课 S7 200 PLC编程软件介绍 第
  • jquery 访问手机摄像头_jQuery webcam plugin调用摄像头

    简介 原来做项目遇到了调用摄像头功能 php小白遇到这情况立刻就去网上搜索 最后用的 https www helloweba com vie 太烂了 作者也没说如何去使用 如果用的是框架开发更是很麻烦 今天再次发现一款比较灵活的插件jQue
  • qt帮助文档的查看(入门)

    qt帮助文档介绍
  • 语音编码之压缩

    我的书 购买链接 京东购买链接 淘宝购买链接 当当购买链接 这本书里叙述了SILK和Opus语音编解码器 这里简单的串接编解码的核心知识点 LPC LPC Linear predictive coding 在音频和语音处理领域常用于表示压缩
  • Python使用open读取文件时,如何不带换行符(\n)

    在读入一些用文本文档存储的数据时 一般都会在每一行存储一个数据 当我们用python自带的open和readlines读取每行的数据时 是会将每一行结尾的换行符 n 读入的 如下 test text txt内容 dataA dataB da
  • R语言 决策树--预测模型

    决策树 算法的目标是建立分类预测模型或回归预测模型 是一种预测模型 按目标不同可以细分为分类树和回归树 因为在展示的时候 类似于一棵倒置的树而得名 如下图 基本概念 根节点 如上图中最上方 一棵决策树只有一个根节点 中间节点 位于中间的节点
  • 找不到msvcp140.dll无法继续执行代码是什么原因?如何修复呢?

    想和大家分享一个常见的问题 找不到msvcp140 dll无法继续执行代码是什么原因 这个问题可能会让你感到困惑和烦恼 但是请放心 我会提供5个修复方法 并在最后告诉你修复完成以后需要注意的事项 找不到 msvcp140 dll 无法继续执
  • SylixOS系统如何永久修改IP地址

    1 进入 etc目录 找到startup sh文件 通过FTP下载该文件 2 用vs打开startup sh文件 将IP配置信息写入文件 保存 退出 我修改的是en2网口的IP地址 3 将修改后的startup sh文件通过FTP重新传输到
  • scrapy框架讲解

    简介 Scrapy是一个基于Python的开源异步爬虫框架 它被广泛用于从网页或App中 提取数据并将其保存到本地或数据库 由2 8版本以后提供了 http2 0协议的爬虫支持 扩展 scrapy是基于twisted框架开发而来 twist