【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/638794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java实现大学计算机课程管理平台 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 实验课程档案模块2.2 实验资源模块2.3 学生实验模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 实验课程档案表3.2.2 实验资源表3.2.3 学生实验表 四、系统展示五、核心代码5.1 一键生成实验5.2 提交实验5.3 批阅实…

第一篇【传奇开心果系列】beeware的toga开发移动应用:轮盘抽奖移动应用

系列博文目录 beeware的toga开发移动应用示例系列博文目录一、项目目标二、开发传奇开心果轮盘抽奖安卓应用编程思路三、传奇开心果轮盘抽奖安卓应用示例代码四、补充抽奖逻辑实现五、开发传奇开心果轮盘抽奖苹果手机应用编程思路六、开发传奇开心果轮盘抽奖苹果手机应用示例代…

【 CSS 】基础 2

“生活就像骑自行车&#xff0c;想要保持平衡&#xff0c;就得不断前行。” - 阿尔伯特爱因斯坦 CSS 基础 2 1. emmet 语法 1.1 简介 Emmet语法的前身是 Zen coding&#xff0c;它使用缩写&#xff0c;来提高 HTML / CSS 的编写速度&#xff0c; VSCode 内部已经集成该语法。…

webpack-dev-server原理解析及其中跨域解决方法

webpack proxy ,就是 webpack 提供的解决跨域的方案。其基本行为是接受客户端发送的请求后转发给其他的服务器&#xff0c;目的是为了解决在开发模式下的跨域问题。 原理 webpack中的proxy 工作原理是利用了 http-proxy-middleware 这个http 代理中间件&#xff0c;实现将请求…

专门为机器学习开发的jpy语言

这本来是一个为工科教学专门开发的附属品&#xff0c;并不是说Python或Java有多不好&#xff0c;根本上它就是一个Java工程教材&#xff0c;但又要结合人工智能。因此&#xff0c;出现了这样一个包容性的怪胎&#xff0c;可以用python一样的语法与Java一起编写。 没流行起来的一…

<信息安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团&#xff08;证券代码&#xff1a;0022…

【开源】基于JAVA的停车场收费系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

在达沃斯,人工智能引发的乐观情绪可谓一分为二

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

基于STM32的基础实验(一)

LED实验 采用STM32单片机设计电路&#xff0c;控制LED灯的亮灭&#xff0c;对单片机端口的位操作进行演示。 实验需要&#xff1a; STM32核心板独立LED 电路原理图 LED灯实际上是一个特殊的二极管&#xff0c;通过控制高低电平亮灭。如图所示&#xff0c;当1为低电平&#…

数据可视化 | 期末复习 | 补档

文章目录 &#x1f4da;介绍可视化&#x1f407;什么是可视化&#x1f407;科学可视化&#xff0c;信息可视化&#xff0c;可视分析系统三者之间有什么区别&#x1f525;&#x1f407;可视化的基本流程&#x1f407;可视化的两个基本设计原则&#x1f407;数据属性&#x1f407…

数学建模学习笔记||层次分析法

评价类问题 解决评价类问题首先需要想到一下三个问题 我们评价的目标是什么我们为了达到这个目标有哪几种可行方案评价的准则或者说指标是什么 对于以上三个问题&#xff0c;我们可以根据题目中的背景材料&#xff0c;常识以及网上收集到的参考资料进行结合&#xff0c;从而筛…

GEE:最小距离分类器(minimumDistance)分类教程(样本制作、特征添加、训练、精度、最优参数、统计面积)

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine (GEE)平台上进行最小距离分类(minimumDistance)的方法和代码,其中包括制作样本点教程(本地、在线和本地在线混合制作样本点,合并样本点等),加入特征变量(各种指数、纹理特征、时间序列特征、物候特征等),运行…

本地git切换地区后,无法使用ssh访问github 22端口解决方案

问题 由于放假回家&#xff0c;发现之前一直使用正常的git&#xff0c;与github无法通讯&#xff0c;pull和push都无法连接。报错如下&#xff1a; connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository. 原因 可能是所…

docker常用基础命令

文章目录 1、Docker 环境信息命令1.1、docker info1.2、docker version 2、系统日志信息常用命令2.1、docker events2.2、docker logs2.3、docker history 3、容器的生命周期管理命令3.1、docker create3.2、docker run 总结 1、Docker 环境信息命令 1.1、docker info 显示 D…

Linux 命令大全 CentOS常用运维命令

文章目录 1、Linux 目录结构2、解释目录3、命令详解3.1、shutdown命令3.1、文件目录管理命令ls 命令cd 命令pwd 命令tree 命令mkdir 命令touch 命令cat 命令cp 命令more 命令less 命令head 命令mv 命令rm 命令ln 命令tail 命令cut命令 3.2、用户管理useradd/userdel 命令用户的…

使用残差网络识别手写数字及MNIST 数据集介绍

MNIST 数据集已经是一个几乎每个初学者都会接触的数据集, 很多实验、很多模型都会以MNIST 数据集作为训练对象, 不过有些人可能对它还不是很了解, 那么今天我们一起来学习一下MNIST 数据集。 1.MNIST 介绍 MNIST 数据集来自美国国家标准与技术研究所, National Institute of S…

2. SpringBoot3 实战之用户模块接口开发

文章目录 开发模式和环境搭建开发模式环境搭建 1. 用户注册1.1 注册接口基本代码编写1.2 注册接口参数校验 2. 用户登录2.1 登录接口基本代码编写2.2 登录认证2.2.1 登录认证引入2.2.2 JWT 简介2.2.3 登录功能集成 JWT2.2.4 拦截器 3. 获取用户详细信息3.1 获取用户详细信息基本…

openEuler安装KVM

1、关闭防火墙和selinux [rootlocalhost ~]# systemctl stop firewalld[rootlocalhost ~]# setenforce 0 2、下载软件包 libvirt&#xff1a;用于管理虚拟化平台的开源的 API&#xff0c;后台程序和管理工具。 qemu&#xff1a;开源&#xff08;模拟&#xff09;软件&#…

【MySQL】InnoDB 什么情况下会产生死锁

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;数据库 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 结语 我的其他博客 前言 在数据库管理系统中&#xff0c;特别是使用 InnoDB 存储引擎的 MySQL 中&#xff0c;死锁是一个可能影响…

Win10下在Qt项目中配置SQlite3环境

资源下载 官网资源&#xff1a;SQLite Download Page 1、sqlite.h sqlite-amalgamation-3450000.zip (2.60 MiB) 2、sqlite3.def&#xff0c;sqlite3.dll sqlite-dll-win-x64-3450000.zip (1.25 MiB) 3、 win10下安装sqlite3所需要文件 sqlite-tools-win-x64-3450000.zipht…