当前位置: 首页 > news >正文

【Python从入门到进阶】47、Scrapy Shell的了解与应用

接上篇《46、58同城Scrapy项目案例介绍》
上一篇我们学习了58同城的Scrapy项目案例,并结合实际再次了项目结构以及代码逻辑的用法。本篇我们来学习Scrapy的一个终端命令行工具Scrapy Shell,并了解它是如何帮助我们更好的调试爬虫程序的。

一、Scrapy Shell简介

Scrapy是一个强大的Python网络爬虫框架,而Scrapy Shell是Scrapy的一个命令行工具,用于在爬虫过程中实时查看和调试网页内容。


Scrapy Shell可以在未启动spider的情况下尝试及调试我们的爬取代码。其本意是用来测试提取数据的代码,不过我们可以将其作为正常的python终端,在上面测试任何的Python代码。该终端是用来测试xPath或css表达式,查看他们的工作方式及从爬取的网页中提取的数据。在编写我们的spider爬虫时,该终端提供了交互性测试我们的表达式代码的功能,免去了每次修改后运行spider的麻烦。旦熟悉了scrapy终端后,我们会发现其在开发和调试spider时发挥的巨大作用。

二、Scrapy Shell的原理

1、Scrapy Shell的作用

Scrapy Shell是Scrapy框架中的一个重要组件,它提供了一个交互式的Python shell环境,允许开发者在爬虫运行过程中实时查看和操作网页内容。以下是Scrapy Shell的主要作用:
(1)网页内容查看:通过Scrapy Shell,可以方便地查看网页的结构和内容,包括HTML、CSS、JavaScript等。这对于分析网页结构和提取数据非常有用。
(2)调试与断言:在Scrapy Shell中,可以执行各种Python代码,进行断言和调试。例如,可以检查请求是否成功、响应的状态码是否为200、数据提取是否正确等。这有助于发现和解决爬虫中的问题。
(3)数据提取与处理:Scrapy Shell允许开发者直接在网页上提取数据,并进行处理。这有助于快速验证数据提取的逻辑和代码的正确性。
(4)请求与响应修改:在Scrapy Shell中,可以对请求和响应进行修改,例如修改请求头、请求URL、请求方法等,或者修改响应内容。这有助于测试和调整爬虫的行为。
(5)自动化测试:使用Scrapy Shell,可以对爬虫进行自动化测试,例如检查数据提取是否符合预期、爬虫是否能够正确地跟踪链接等。这有助于提高爬虫的稳定性和可靠性。

2、Scrapy Shell的工作原理

Scrapy Shell通过发送HTTP请求获取网页响应,并在交互式的Python shell环境中允许开发者查看和操作响应内容,以下是Scrapy Shell的工作原理:
(1)请求与响应:当启动Scrapy Shell时,它会向目标URL发送一个HTTP请求。Scrapy Shell使用Scrapy的下载器来处理请求,并获取响应。响应是一个Scrapy Response对象,它包含了网页的HTML、CSS、JavaScript等内容。
(2)Python Shell环境:在接收到响应后,Scrapy Shell会启动一个交互式的Python shell环境。在这个环境中,开发者可以输入Python代码来查看和操作响应内容。Scrapy Shell会自动将响应对象注入到shell环境中,使得开发者可以直接访问和操作响应对象。
(3)代码执行与断言:在Python shell环境中,开发者可以执行各种Python代码,进行断言和调试。例如,可以使用Python的BeautifulSoup库来解析HTML,提取数据并进行断言。如果断言失败,Scrapy Shell会显示断言错误,并允许开发者继续在shell环境中进行调试。
(4)请求与响应的修改:在Scrapy Shell中,开发者还可以对请求和响应进行修改。例如,可以修改请求头、请求URL、请求方法等,或者修改响应内容。这些修改可以在shell环境中立即生效,并允许开发者测试和调整爬虫的行为。
(5)退出与清理:当开发者完成在Scrapy Shell中的操作时,可以退出shell环境。退出后,Scrapy Shell会自动清理和释放相关资源。

3、Scrapy Shell与Scrapy的其他组件之间的关系

Scrapy Shell作为Scrapy框架中的一个重要组件,与其他组件之间存在着密切的关系。了解这些关系有助于更好地理解和应用Scrapy Shell。以下是Scrapy Shell与Scrapy其他组件之间的关系:
(1)下载器与Scrapy Shell:Scrapy Shell通过Scrapy的下载器组件来发送HTTP请求并获取响应。当启动Scrapy Shell时,下载器会处理请求并返回响应,使得开发者可以在Shell环境中查看和操作响应内容。
(2)调度器与Scrapy Shell:Scrapy Shell可以与调度器组件配合使用,以按照特定的计划或规则发送请求。调度器负责管理请求的排队和执行,而Scrapy Shell则可以在Shell环境中直接发送请求并获取响应。
(3)爬虫与Scrapy Shell:爬虫是Scrapy的核心组件,负责定义如何提取数据和跟踪链接等。Scrapy Shell可以与爬虫配合使用,帮助开发者在爬虫运行过程中实时查看和调试网页内容。开发者可以在Shell环境中测试和调整爬虫的行为。
(4)项目管理与Scrapy Shell:Scrapy Shell通常与Scrapy的项目管理相关联。当启动Scrapy Shell时,它会自动加载相应的项目配置和设置。这使得开发者可以在Shell环境中使用项目特定的设置和代码,进行数据提取和处理等操作。
(5)扩展与Scrapy Shell:Scrapy Shell可以与Scrapy的扩展组件配合使用,以扩展其功能。例如,可以使用扩展来修改请求和响应、处理特殊内容类型等。这些扩展可以在Shell环境中直接使用,以支持开发者进行调试和测试。

三、安装ipython

安装: pip install ipython

简介:
IPython 是一个基于 Python 的交互式计算环境,它为用户提供了一个更为强大和丰富的界面来使用Python语言。相较于标准的Python解释器,IPython提供了更多的增强功能,例如提供智能的自动补全,高亮输出,及其他特性。
如果我们安装了IPython,scrapy终端将使用IPython (替代标准Python终端)。 IPython终端与其他终端命令行工具相比更为强大。

四、Scrapy Shell的使用方法

1、启动Scrapy Shell

要启动Scrapy Shell,可以在命令行中输入以下命令:

scrapy shell <URL>

其中,<URL>是要爬取的网页的URL地址。执行该命令后,Scrapy Shell会发送一个HTTP请求到目标URL,并在交互式的Python shell环境中启动。

2、使用Scrapy Shell查看网页内容

在Scrapy Shell中,可以直接输入response来获取响应对象,并通过响应对象访问网页内容。例如,可以使用以下代码提取网页标题:

response.title.strip()

Scrapy Shell会自动将响应对象注入到shell环境中,因此可以直接访问响应对象的属性和方法。

3、使用Scrapy Shell进行断言和调试

在Scrapy Shell中,可以使用Python的断言语句来进行数据验证。例如,可以断言某个元素的文本是否符合预期:

assert response.css('h1.title').get().strip() == 'Expected Title'

如果断言失败,Scrapy Shell会显示断言错误,并允许开发者继续在shell环境中进行调试。

4、使用Scrapy Shell修改请求和响应

在Scrapy Shell中,可以直接修改请求和响应对象的内容。例如,可以修改请求头、请求URL、请求方法等,或者修改响应内容。这些修改可以在shell环境中立即生效,并允许开发者测试和调整爬虫的行为。例如,可以修改请求头中的User-Agent:

request.headers['User-Agent'] = 'New User-Agent'

5、Scrapy Shell的退出与清理

当开发者完成在Scrapy Shell中的操作时,可以输入exit()或Ctrl+D退出shell环境。退出后,Scrapy Shell会自动清理和释放相关资源。

五、Scrapy Shell的使用实例

首先我们cmd打开Windows的命令符对话终端,然后通过“scrapy shell <URL>”可以直接启动Scrapy Shell,请求目标url:

或者我们需要看到高亮或者自动补全,可以安装ipython(这里我们已经安装过了,会自动调用ipython)。
执行上面的代码后,我们可以看到返回了很多请求反馈信息,
其中就包括响应的Scrapy Response对象,它包含了网页的HTML、CSS、JavaScript等内容:

这里的response是可以直接使用的,例如我们输入“response.text”,就可以看到请求的url的网页源码的文本文档内容:

或者是查看response请求的url是哪个,或者response的返回状态码是多少:

那么我们基本上就可以在不直接编写spider文件的情况下,去临时调试一个网页的爬虫逻辑。例如我们现在需要获取百度首页的“百度一下”:

原来的xpath代码是这么写的(//input[@id='su']/@value):

此时我们利用response对象,就可以直接执行xpath函数获取该元素对象的信息:

这里我们首先通过response.xpath获取到一个结果列表对象,然后通过“extract_first”函数获取列表的第一个内容,就是我们刚刚爬到的百度按钮的value值。
注:不知道函数全名咋写,安装了ipython的童鞋,可以按Tab健呼唤出提示(类似Linux的命令行提示),选择需要的函数:

这就是使用ipython的好处,可以提高我们的调试效率。

上面的方法,还可以使用css函数来实现,如:

注:不推荐使用css函数获取数据,语法比较复杂。

以上就是scrapy shell的基本介绍和使用实例。下一篇我们来正式进入一个中型scrapy工程的开发,来爬取当当网的数据。

参考:尚硅谷Python爬虫教程小白零基础速通
转载请注明出处:https://guangzai.blog.csdn.net/article/details/135732129

相关文章:

【Python从入门到进阶】47、Scrapy Shell的了解与应用

接上篇《46、58同城Scrapy项目案例介绍》 上一篇我们学习了58同城的Scrapy项目案例&#xff0c;并结合实际再次了项目结构以及代码逻辑的用法。本篇我们来学习Scrapy的一个终端命令行工具Scrapy Shell&#xff0c;并了解它是如何帮助我们更好的调试爬虫程序的。 一、Scrapy Sh…...

【ARM 嵌入式 编译系列 2.2 -- GCC 编译参数学习 assembler-with-cpp 使用介绍】

请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 文章目录 GCC 编译选项 assembler-with-cpp GCC 编译选项 assembler-with-cpp 在 rt-thread 的编译脚本中经常会看到下面编译参数&#xff1a; AFLAGS -c DEVICE -x assembler-with-cpp -Wa,-mimplicit-itthumb a…...

深入理解java对象的内存布局

概述&#xff1a; 在HotSpot虚拟机里&#xff0c;对象在堆内存中的存储布局可以划分为三个部分&#xff1a;对象头&#xff08;Header&#xff09;、实例数据&#xff08;Instance Data&#xff09;和对齐填充&#xff08;Padding&#xff09;。 在HotSpot虚拟机里&#xff0c;…...

MetaGPT中提到的SOP

MetaGPT框架中的提及的SOP概念指的是什么&#xff0c;有什么优点和缺点&#xff0c;为什么要使用SOP? 在MetaGPT框架中&#xff0c;SOP&#xff08;Set of Procedures&#xff09;指的是一套标准化的流程和步骤&#xff0c;用于指导模型完成特定任务。SOP可以帮助模型更好地理…...

第15届蓝桥杯嵌入式省赛准备第三天总结笔记(使用STM32cubeMX创建hal库工程+串口接收发送)

因为我是自己搞得板子&#xff0c;原本的下程序和串口1有问题&#xff0c;所以我用的是串口2&#xff0c;用的PA2和PA3 一&#xff0c;使用CubeMX配置串口 选择A开头的这个是异步通信。 配置串口参数&#xff0c;往届的题基本用的9600波特率&#xff0c;所以我这里设置为9600…...

centos安装redis,但是启动redis-server /home/redis/conf/redis7000.conf卡住,怎么解决

如果你在启动 Redis 服务器时发现过程卡住&#xff0c;这可能是由于几种不同的原因。下面是一些可能导致这种情况的原因以及相应的解决方法&#xff1a; 1. 后台启动 Redis 默认在前台运行。如果你在命令行启动 Redis 并且没有指定它在后台运行&#xff0c;它将在前台运行&am…...

开发实践6_project

要求&#xff1a; ① 页面写入超链接&#xff0c;获取所有数据item&#xff0c;显示在另一个页面&#xff0c;1min内&#xff0c;即使数据有变化&#xff0c;页面内容不变&#xff0c;1min后点击超链接可获取最新信息&#xff1b; ② 使用middleware完成用户请求路径判断 &am…...

HCIP----MGRE实验

实验要求&#xff1a; 第一步&#xff0c;基本的IP地址配置 R1&#xff1a; [R1]int g0/0/1 [R1-GigabitEthernet0/0/1]ip add 192.168.1.1 24 #配置PC的网关 [R1]int Serial 4/0/0 [R1-Serial4/0/0]link-protocol hdlc #R1和R2之间采用hdlc封装 [R1-S…...

STM32标准库开发——PWM驱动代码

PWM驱动初始化代码 使能定时器二时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);设置定时器时钟源 TIM_InternalClockConfig(TIM2);配置定时器二的时基单元 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_TimeBaseInitStruct.TIM_ClockDivisionTIM_CKD_D…...

postman导入https证书

进入setting配置中Certificates配置项 点击“Add Certificate”,然后配置相关信息 以上配置完毕&#xff0c;如果测试出现“SSL Error:Self signed certificate” 则将“SSL certificate verification”取消勾选...

Spark UI中 Shuffle Exchange 和 BroadcastExchange 中的 dataSize 值为什么不一样

背景 Spark 3.5 最近在看Spark UI 上的一些指标看到一个很有意思的东西, 相邻的Shuffle Exechange 和 BroadcastExechange 中的 datasize 居然不一样&#xff0c; 前者为 765KB, 后者为 64.5MB。差别还不少&#xff0c;中间就增加了一个 AQEShuffleRead 计划 结论 Shuffle E…...

阿里云优惠券领取入口、使用方法和限制条件,2024最新

阿里云优惠代金券领取入口&#xff0c;阿里云服务器优惠代金券、域名代金券&#xff0c;在领券中心可以领取当前最新可用的满减代金券&#xff0c;阿里云百科aliyunbaike.com分享阿里云服务器代金券、领券中心、域名代金券领取、代金券查询及使用方法&#xff1a; 阿里云优惠券…...

自己构建webpack+vue3+ts

先看看我的目录结构&#xff08;我全局使用TS&#xff09;&#xff1a; 一、安装配置webpack打包 安装esno npm install esnoesno 是基于 esbuild 的 TS/ESNext node 运行时,有了它&#xff0c;就可以直接通过esno *.ts的方式启动脚本&#xff0c;package.json中添加 type:…...

【AI】小白入门笔记

前言 2024年&#xff0c;愿新年胜旧年&#xff01;作为AI世界的小白&#xff0c;今天先来从一些概念讲起&#xff0c;希望路过的朋友们多多指教&#xff01; 正文 AI (人工智能) 提起AI, 大家可能会想起各种机器人&#xff0c;移动手机的“Siri”,"小爱同学", 是语…...

GPT应用开发:编写插件获取实时天气信息

欢迎阅读本系列文章&#xff01;我将带你一起探索如何利用OpenAI API开发GPT应用。无论你是编程新手还是资深开发者&#xff0c;都能在这里获得灵感和收获。 本文&#xff0c;我们将继续展示聊天API中插件的使用方法&#xff0c;让你能够轻松驾驭这个强大的工具。 插件运行效…...

揭开Spring MVC的真面目

官方对于Spring MVC的描述为&#xff1a; Spring Web MVC是基于Servlet API框架构建的原始Web框架&#xff0c;从一开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来自其源模块的名称&#xff08;Spring-webmvc&#xff09;&#xff0c;但它通常被称为“Spring-MVC…...

AI大模型开发架构设计(3)——如何打造自己的大模型

文章目录 如何打造自己的大模型1 新时代职场人应用AIGC的5重境界2 人人需要掌握的大模型原理职场人都能听懂的大语音模型的训练过程职场人都能听得懂的大语言模型的Transformer推理过程 3 如何构建自己的大模型需要具备三个方面的能力LangChain是什么&#xff1f;LangChain主要…...

Linux C语言开发(三)运算符和表达式

目录 一.什么是运算符 二.什么是表达式 一.什么是运算符 在C语言中,运算符是用于执行特定操作的符号。这些操作可以涉及一个或多个值(称为操作数),并产生一个新的值或效果。C语言提供了多种类型的运算符,用于执行算术、比较、逻辑和其他类型的操作。 以下是C语言中常见的…...

Spring-AOP入门案例

文章目录 Spring-AOP入门案例概念:通知(Advice)切入点(Pointcut )切面&#xff08;Aspect&#xff09; 目标对象(target)代理对象(Proxy)顾问&#xff08;Advisor)连接点(JoinPoint) 简单需求&#xff1a;在接口执行前输出当前系统时间Demo原始未添加aop前1 项目包结构2 创建相…...

中仕教育:国考调剂和补录的区别是什么?

国考笔试成绩和进面名单公布之后&#xff0c;考生们就需要关注调剂和补录了&#xff0c;针对二者之间的区别很多考生不太了解&#xff0c;本文为大家解答一下关于国考调剂和补录的区别。 1.补录 补录是在公式环节之后进行的&#xff0c;主要原因是经过面试、体检和考察&#…...

ESP32-TCP服务端(Arduino)

将ESP32设置为TCP服务器 介绍 TCP&#xff08;Transmission Control Protocol&#xff09;传输控制协议&#xff0c;是一种面向连接的&#xff08;一个客户端对应一个服务端&#xff09;、可靠的传输层协议。在TCP的工作原理中&#xff0c;它会将消息或文件分解为更小的片段&a…...

HCIA-HarmonyOS设备开发认证-序

序 最近涉及到HarmonyOS鸿蒙系统设备开发&#xff0c;在网络上已经有很多相关资料&#xff0c;视频教程&#xff0c;我也移植了公司的一个stm32G474板卡&#xff0c;运行LiteOS-m L0系统。 一面看资料一面移植&#xff0c;遇到不少坑&#xff0c;当看到运行的LOGO时&#xff0…...

Med-YOLO:3D + 医学影像 + 检测框架

Med-YOLO&#xff1a;3D 医学影像 检测框架 提出背景设计思路网络设计训练设计讨论分析 魔改代码&#xff1a;加强小目标检测总结 提出背景 论文链接&#xff1a;https://arxiv.org/abs/2312.07729 代码链接&#xff1a;https://github.com/JDSobek/MedYOLO 提出背景&…...

Docker部署Golang服务

不管是开发还是生产环境&#xff0c;通过 docker 方式部署服务都是一种不错的选择&#xff0c;能够解决不同开发环境一致性的问题。 本文以项目&#xff1a;https://github.com/johncxf/go-api 为例。 Dockerfile 构建 Go 运用环境 在项目根目录下添加 Dockerfile 文件&…...

C#,字符串匹配(模式搜索)Sunday算法的源代码

Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。 核心思想&#xff1a;在匹配过程中&#xff0c;模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较&#xff0c;它在发现不匹配时&#xff0c;算法能跳过尽可能多的字符以进行下一步的匹配&…...

makefile 编译动态链接库使用(.so库文件)

makefile 编译动态链接库使用&#xff08;.so库文件&#xff09; 动态链接库:不会把代码编译到二进制文件中&#xff0c;而是在运行时才去加载&#xff0c; 好处是程序可以和库文件分离&#xff0c;可以分别发版&#xff0c;然后库文件可以被多处共享 动态链接库 动态&#…...

Hive 数仓及数仓设计方案

数仓(Data Warehouse) 数据仓库存在的意义在于对企业的所有数据进行汇总&#xff0c;为企业各个部门提供一个统一、规范的出口。做数仓就是做方案&#xff0c;是用数据治理企业的方案。 数据仓库的特点 面向主题集成 公司中不同的部门都会去数据仓库中拿数据&#xff0c;把独…...

Ubuntu使用docker-compose安装redis

ubuntu环境搭建专栏&#x1f517;点击跳转 Ubuntu系统环境搭建&#xff08;十三&#xff09;——使用docker-compose安装redis 文章目录 Ubuntu系统环境搭建&#xff08;十三&#xff09;——使用docker-compose安装redis1.搭建文件夹2.docker-compose.yaml配置文件3.redis.co…...

大数据安全 | 期末复习(上)| 补档

文章目录 &#x1f4da;概述⭐️&#x1f407;大数据的定义、来源、特点&#x1f407;大数据安全的含义&#x1f407;大数据安全威胁&#x1f407;保障大数据安全&#x1f407;采集、存储、挖掘环节的安全技术&#x1f407;大数据用于安全&#x1f407;隐私的定义、属性、分类、…...

Kylin 安装novnc 远程访问

noVNC可以使用浏览器直接访问服务器&#xff0c;而不需要使用VNC客户端。 1.初始环境 关闭防火墙或允许IP访问本机 2.安装依赖 dnf install -y tigervnc-server git 3.git下载novnc git clone https://github.com/novnc/noVNC.git git clone https://gitee.com/yangyizhao…...