Python:Scrapy Shell的使用教程

Python Scrapy:使用Scrapy Shell进行调试 在网页抓取的过程中,我们常常会遇到各种问题,如无法正确提取数据、请求失败等。Scrapy Shell作为Scrapy框架提供的一个交互式调试工具,能够帮助开发者在不运行整个爬虫项目的情况下,快速测试和验证网页数据的提取逻辑、请求的正确性等。本文的目的就是详细介绍如何使用Scrapy Shell进行调试,范围涵盖Scrapy Shell的基本概念、使用方法、实际应用以及相关资源推荐等方面。本文将按照以下结构展开:首先介绍Scrapy Shell的核心概念与联系,包括其工作原理和架构; 阅读详情

Scrapy shell 是一个交互式的shell,一旦你习惯使用了Scrapy shell,你将会发现Scrapy shell对于开发爬虫是非常好用的一个测试工具。

在使用Scrapy shell之前,你需要先安装ipython(可以在http://www.lfd.uci.edu/~gohlke/pythonlibs/查找相应版本的ipython进行安装)。

启用shell

可以使用如下命令启用shell        
scrapy shell <url>
其中<url>就是你想抓取的页面url

    使用shell

    Scrapy shell可以看成是一个内置了几个有用的功能函数的python控制台程序。

        功能函数

  • shelp() - 输出一系列可用的对象和函数
  • fetch(request_or_url)-从给定的url或既有的request请求对象重新生成response对象,并更新原有的相关对象
  • view(response)-使用浏览器打开原有的response对象(换句话说就是html页面)

        Scrapy 对象

        使用Scrapy shell下载指定页面的时候,会生成一些可用的对象,比如Response对象和Selector对象(Html和XML均适用)
        这些可用的对象有:
  • crawler - 当前的Crawler对象
  • spider 
  • request - 最后获取页面的请求对象
  • response - 一个包含最后获取页面的响应对象
  • sel    - 最新下载页面的Selector对象
  • settings - 当前的Scrapy settings

    Scrapy shell例子

        以我的个人博客作为测试: http://blog.youkuaiyun.com/php_fly
        首先,我们启动shell        
scrapy shell http://blog.youkuaiyun.com/php_fly --nolog
以上命令执行后,会使用Scrapy downloader下载指定url的页面数据,并且打印出可用的对象和函数列表
    [s] Available Scrapy objects:
    [s]   crawler    <scrapy.crawler.Crawler object at 0x0000000002AEF7B8>
    [s]   item       {}
    [s]   request    <GET http://blog.youkuaiyun.com/php_fly>
    [s]   response   <200 http://blog.youkuaiyun.com/php_fly>
    [s]   sel        <Selector xpath=None data=u'<html xmlns="http://www.w3.org/1999/xhtm'>
    [s]   settings   <CrawlerSettings module=None>
    [s]   spider     <Spider 'default' at 0x4cdb940>
    [s] Useful shortcuts:
    [s]   shelp()           Shell help (print this help)
    [s]   fetch(req_or_url) Fetch request (or URL) and update local objects
    [s]   view(response)    View response in a browser

    获取曾是土木人博客的文章列表超链接

 In [9]: sel.xpath("//span[@class='link_title']/a/@href").extract()
    Out[9]:
    [u'/php_fly/article/details/19364913',
     u'/php_fly/article/details/18155421',
     u'/php_fly/article/details/17629021',
     u'/php_fly/article/details/17619689',
     u'/php_fly/article/details/17386163',
     u'/php_fly/article/details/17266889',
     u'/php_fly/article/details/17172381',
     u'/php_fly/article/details/17171985',
     u'/php_fly/article/details/17145295',
     u'/php_fly/article/details/17122961',
     u'/php_fly/article/details/17117891',
     u'/php_fly/article/details/14533681',
     u'/php_fly/article/details/13162011',
     u'/php_fly/article/details/12658277',
     u'/php_fly/article/details/12528391',
     u'/php_fly/article/details/12421473',
     u'/php_fly/article/details/12319943',
     u'/php_fly/article/details/12293587',
     u'/php_fly/article/details/12293381',
     u'/php_fly/article/details/12289803']

    修改scrapy shell的请求方式:

     >>> request = request.replace(method="POST")
        >>> fetch(request)
        [s] Available Scrapy objects:
        [s]   crawler    <scrapy.crawler.Crawler object at 0x1e16b50>
        ...

从Spider中调用Scrapy shell

在爬虫运行过程中,有时需要检查某个响应是否是你所期望的。
    这个需求可以通过scrapy.shell.inspect_response函数进行实现
    以下是一个关于如何从spider中调用scrapy shell的例子

from scrapy.spider import Spider


class MySpider(Spider):
    name = "myspider"
    start_urls = [
        "http://example.com",
        "http://example.org",
        "http://example.net",
    ]

    def parse(self, response):
        # We want to inspect one specific response.
        if ".org" in response.url:
            from scrapy.shell import inspect_response
            inspect_response(response)

        # Rest of parsing code.
当你启动爬虫的时候,控制台将打印出类似如下的信息    
2014-02-20 17:48:31-0400 [myspider] DEBUG: Crawled (200) <GET http://example.com> (referer: None)
    2014-02-20 17:48:31-0400 [myspider] DEBUG: Crawled (200) <GET http://example.org> (referer: None)
    [s] Available Scrapy objects:
    [s]   crawler    <scrapy.crawler.Crawler object at 0x1e16b50>
    ...
    >>> response.url
    'http://example.org'

注意:当Scrapy engine被scrapy shell占用的时候,Scrapy shell中的fetch函数是无法使用的。 然而,当你退出Scrapy shell的时候,蜘蛛将从停止的地方继续爬行   

作者:曾是土木人(http://blog.youkuaiyun.com/php_fly)

原文地址:http://blog.youkuaiyun.com/php_fly/article/details/19555969

参考文章:Scrapy shell

Python爬虫之Scrapy框架系列(9)—— Scrapy shell Python爬虫之Scrapy框架系列(9)——Scrapyshell 阅读详情

相关推荐

Python爬虫编程思想(145):使用Scrapy Shell抓取Web资源

Scrapy提供了一个Shell,相当于Python的REPL环境,我们可以用这个Scrapy Shell测试Scrapy代码。

一个被知识诅咒的人 2039

Scrapy基本概念——Scrapy shell

Scrapy shell是一个交互式shell,可以在不运行Spider的情况下,测试和调试自己的数据提取代码。事实上,Scrapy shell可以测试任何类型的代码,因为它本就是一个常规的Python shell。7、使用response实例打印响应头信息。6、使用response实例查看响应状态。4、使用request实例修改请求方式。1、使用response实例提取数据。3、使用response实例提取数据。2、使用fetch()函数获取响应。5、使用fetch()函数获取响应。

激情人生,美好生活 1602

Scrapy shell的使用【python爬虫入门进阶】(22)

scrapy shell的使用

码农飞哥 2735

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

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

程序猿之洞 1963

【流复制环境PostgreSQL-14.1到PostgreSQL-16.1大版本升级】

PostgreSQL大版本会定期添加新特性,这些新特性通常会改变系统表的布局,但内部数据存储格式很少改变。pg_upgrade通过创建新的系统表和重用旧的用户数据文件来执行快速升级。pg_upgrade升级主要有三种用法:1、使用pg_upgrade拷贝升级。2、使用pg_upgrade链接升级(带有- -link选项),- -link较快,但是启动新版本后修改了数据文件,再启动旧版本可能数据损坏,回滚较麻烦,所以尽量避免使用link参数进行升级。

小怪兽的博客 2926

光学仿真案例(1) 铌酸锂非线性波导仿真模拟 FDTD仿真

在过去几年里,许多集成光子学应用往往需要多个相干可调谐光源,而且从外部激光器引入额外的光输入增加了芯片封装的复杂性,如果使用基于III-V族、氮化硅(SiN)或铌酸锂(LNO)的集成光源又大大增加了制造复杂性和成本。然而,通过非线性谐波相互作用产生的光源不需要额外的制造工艺来产生增益、反馈和外部电路,即可支持许多应用。在下面的案例中,演示了一种基于Luo[1]的铌酸锂波导频率转换集成系统。该案例主要仿真了利用温度调制实现高效相位匹配的铌酸锂纳米光子波导的二次谐波产生。

q895235273的博客 4145

爬虫 scrapy ——scrapy shell调试及下载当当网数据(十一)

什么是scrapy shell?scrapy终端,是一个交互终端,供您在未启动spider的情况下尝试及调试您的爬取代码。其本意是用来测试提取数据的代码,不过您可以将其作为正常的python终端,在上面测任何的python代码。该终端是用来测试Xpath或css表达式,查看他们的工作方式及从爬取的网页中提取的数据。在编写您的spider时,一旦熟悉了scrapy终端后,您会发现其在开发和调试spider时发挥的最大作用。定义要获取的图片、书名和价格# 通俗地讲就是你下载的数据都有什么# 爬取图片。

Billie使劲学的博客 1630

Habitat-v0.1.7安装全网最详细教程(解决habitat-sim下载时网络问题)

Habitat-v0.1.7安装全网最详细教程(解决habitat-sim下载时网络问题)

shannanshouyin的博客 1327

scrapy shell 介绍

scrapy shell介绍

grey_mouse的博客 643

KEIL MDK 生成bin文件实战:C51与ARM双平台配置指南

本文详细介绍了在KEIL MDK开发环境中,为C51和ARM双平台自动生成BIN文件的实战方法。针对C51平台,通过srec_cat.exe工具编写批处理脚本并集成到KEIL;针对ARM平台,则利用fromelf.exe工具直接配置。文章还提供了通用脚本方案和路径、变量、版本兼容性等常见问题的避坑指南,帮助开发者高效完成嵌入式程序部署。

weixin_29188997的博客 346

量化回测框架三选一:Backtrader、Zipline、PyAlgoTrade,新手到底该跟谁学?

本文对比分析了三大量化回测框架Backtrader、Zipline和PyAlgoTrade,帮助新手选择最适合的入门工具。从安装配置、策略编写到文档查阅,详细解析各框架的特点和适用场景,为量化交易初学者提供实用指南。

weixin_28745309的博客 268

Scapy——Scrapy shell的使用

在开发爬虫的使用,scrapy shell可以帮助我们定位需要爬取的资源 启动Scrapy Shell 在终端中输入以下内容即可启动scrapy shell,其中url是要爬取的页面,可以不设置 scrapy shell <url> scrapy shell还支持本地文件,如果想用爬取本地的web页面副本,可以用以下方式。使用文件相对路径时,确保使用 “./”...

dishan4749253的博客 550

计算机组成原理(第三版)唐朔飞-第七章指令系统-课后习题

机器字长是指CPU一次能处理数据的位数通常与CPU的寄存器位数有关。指令字长是指机器指令中二进制代码的总位数。存储字长是指存储单元中存放二进制代码的总位数。三者可以相等也可以不等视不同机器而定。答:OP(4位)A1(6位)A_1(6位)A1​(6位)A2(6位)A_2(6位)A2​(6位)设二地址指令格式为该指令系统的基本格式,4位操作码共有16种编码,其中13种用来定义二地址指令,还剩3种可用作扩展标志。一地址指令条数=3∗26=192。

weixin_45735391的博客 7万+

Python:Scrapy Shell

Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据。 如果安装了 IPython ,Scrapy终端将使用 IPython (替代标准Python终端)。 IPython 终端与其他相比更为强大,提供智能的自动补全,高亮输出,及其他特性。(推荐安装IPython) 启动S...

Lansonli(蓝深李)的博客 835

用python画带有正负值的条形图

常见的条形图只能表现数据的大小,却不能表现值的正负关系。但是其实仅仅使用`pandas`和`matplotlib`两个包就可以实现y轴负轴的添加以及负值的显示,并且可以为正负值分别设置不同的颜色,让条形图看上去更加清晰,易于我们分析

weixin_44853840的博客 5384

程序员应用AI大模型创业实现财务自由的100种赚钱方案原理与实战指南

成功的 AI 创业者都遵循着 “技术 + 需求 + 变现” 的铁三角法则。记住:不是要做 “全能大模型”,而是成为某个垂直领域的 “AI 解决方案专家”。现在就开始行动:用周末 2 小时完成第一个 MVP,下周启动种子用户测试,三个月内找到可复制的盈利模式。当你实现第一个 10 万用户时,会发现财务自由的密码藏在持续迭代的每个 0.1 版本更新中。延伸思考:你的技术背景适合切入哪个细分领域?

AI天才研究院 1380

Python 爬虫,scrapy,scrapy shell 交互式终端

  在python命令终端中输入命令: scrapy shell http://www.baidu.com   进入scrapy的交互式命令环境。 scrapy的交互式命令终端中可以调试指定url请求的response等信息,也可以测试XPath表达式等。 可以调试如下信息等: response.url:当前响应的url地址 response.request.url:当前响应对应的请求的...

houyanhua1的专栏 399

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

关于在python中scrapy模块的scrapy shell中通过xpath无法查询到相应的元素的问题

前言 某天打算使用scrapy shell爬取prts上信息的时候复制了元素的xpath却在scrapy shell中无法查询到相应的结果,得到的结果是一个空列表,如图: 但是在某些网站的某些元素却是可以成功查询到有效的结果,比如说百度网站的“百度一下”按钮 正文 在网上搜索结果后主要有两种观点,第一种是Chrome的复制xpath会自动添加<tbody>标签,即使源码上不存在这个标签,这样自然无法查询到正确有效的结果,但是我爬取的prts的元素恰好有<tbody>标签,所以不是

Ui_none的博客 974

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Python爬虫5.7 — scrapy框架Shell命令的使用

Python爬虫5.7 — scrapy框架Shell命令的使用综述Scrapy Shall打开Scrapy Shall总结其他博文链接 综述 本系列文档用于对Python爬虫技术的学习进行简单的教程讲解,巩固自己技术知识的同时,万一一不小心又正好对你有用那就更好了。 Python 版本是3.7.4 本篇文章主要讲解Scrapy Shall的使用。 Scrapy Shall 我们想要再爬虫中使用x...

让编程改变世界 944

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python Scrapy shell 调试添加headers

在terminal中输入 scrapy shel 随后再>>> 输入 headers= {‘host’:‘1’} req = scrapy.Request(url=‘https://www.guazi.com/cd/buy/’,headers=headers) fetch(req) terminal具体显示结果如下: [s] Available Scrapy object...

welcome 1562

Python爬虫教程-33-scrapy shell 的使用

Python爬虫教程-33-scrapy shell 的使用

qq_44906554的博客 188

Python爬虫 scrapy -- scrapy 日志信息和日志等级、scrapy shell的使用、scrapy post请求

Python爬虫 scrapy -- scrapy 日志信息和日志等级、scrapy shell的使用、scrapy post请求

天行健 君子以自强不息,地势坤 君子以厚德载物。 4394

Python自学:Scrapy Shell的使用

Scrapy Shell:便于验证遍写的提取规则是否正确 [主:也可导入其他包eg:from bs4 import BeautifulSoup]

qq_45988110的博客 200

10.2 Python Scrapy的shell编程

2、Scrapy的shell编程 使用 Scrapy 进行爬虫时,先用 shell 程序调试成功后再在 Scrapy 项目中运行,减少直接在 Scrapy 项目中运行出错导致工作效率低 需求: 爬取BOSS直聘官网北京地区的招聘信息 BOSS直聘官网北京地区 url:https://www.zhipin.com/job_detail/?query=&city=101010100&am...

wk的博客 548

python Scrapy爬虫—使用scarpy shell调试

1、进入对应的虚拟环境2、命令scrapy shell 网站域名接下来就可以进行对应的字段解析(使用xpath或者css)

辣手熊猫博客 300

python爬虫scrapy之scrapy终端(Scrapy shell)

  Scrapy终端是一个交互终端,供您在未启动spider的情况下尝试及调试您的爬取代码。 其本意是用来测试提取数据的代码,不过您可以将其作为正常的Python终端,在上面测试任何的Python代码。 该终端是用来测试XPath或CSS表达式,查看他们的工作方式及从爬取的网页中提取的数据。 在编写您的spider时,该终端提供了交互性测试您的表达式代码的功能,免去了每次修改后运行spider...

weixin_30691871的博客 401
上一篇: Python:Windows7 (64位)系统下安装Scrapy详细教程
下一篇: Python:Scrapy框架中Item Pipeline组件(项目管道组件)的使用教程
曾是土木人
博客等级 码龄15年 67粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值