在开发爬虫的使用,scrapy shell可以帮助我们定位需要爬取的资源

启动Scrapy Shell

在终端中输入以下内容即可启动scrapy shell,其中url是要爬取的页面,可以不设置

scrapy shell <url>

scrapy shell还支持本地文件,如果想用爬取本地的web页面副本,可以用以下方式。使用文件相对路径时,确保使用 “./” 或者 “../” 或者 “file://” ,直接scarpy shell index.html的方式会报错

# UNIX-style
scrapy shell ./path/to/file.html
scrapy shell ../other/path/to/file.html
scrapy shell /absolute/path/to/file.html # File URI
scrapy shell file:///absolute/path/to/file.html

Shell使用方法

可用的方法

  • shelp(): 打印可用的对象和方法
  • fetch(url[, redirect=True]): 爬取新的 URL 并更新所有相关对象
  • fetch(request): 通过给定request 爬取,并更新所有相关对象
  • view(response): 使用本地浏览器打开给定的响应。这会在计算机中创建一个临时文件,这个文件并不会自动删除

可用的Scrapy对象

Scrapy shell自动从下载的页面创建一些对象,如 Response 对象和 Selector 对象。这些对象分别是

  • crawler: 当前Crawler 对象
  • spider: 爬取使用的 Spider,如果没有则为Spider对象
  • request: 最后一个获取页面的Request对象,可以使用 replace() 修改请求或者用 fetch() 提取新请求
  • response: 最后一个获取页面的Response对象
  • settings: 当前的Scrapy设置

简单示例

fetch('https://scrapy.org')

response.xpath('//title/text()').get()
# 输出
# 'Scrapy | A Fast and Powerful Scraping and Web Crawling Framework' from pprint import pprint
pprint(response.headers)

在Spider内部调用Scrapy shell来检查响应

有时你想检查Spider某个特定点正在处理的响应,只是为了检查你期望的响应是否到达那里。

可以通过使用该scrapy.shell.inspect_response功能来实现。

import scrapy

class MySpider(scrapy.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, self) # Rest of parsing code.

启动爬虫后我们就开始检查工作,注意这里不能使用fectch(),因为Scrapy引擎被shell阻塞了

response.xpath('//h1[@class="fn"]')

最后,按Ctrl-D(或Windows中的Ctrl-Z)退出shell并继续爬行。

实例

爬取Scrapy官方文档

fetch("https://docs.scrapy.org/en/latest/index.html")

根据页面标签,可以知道,根据标题等级,标题在h1、h2标签中

以爬取标题二为例,我们可以用xpath定位这些元素

response.xpath('//h2')

此时仍然是一个xpath对象,需要用extract()提取出来

response.xpath('//h2').extract()

文档主体都在div标签中,class名称为“section”,如果想爬取文档内容,可以这样

response.xpath("//div[@class='section']").extract()

然后再用正则表达式提取我们需要的内容

import re
data = response.xpath("//div[@class='section']").extract() # 一个列表
pattern = re.compile("(?<=<h2>).*(?=<a)") # 响应中可以看到结果为:<h2>二级标题<a class=……,用正则匹配出中间的标题
title = re.findall(pattern, data[])
print(title)

Scapy——Scrapy shell的使用的更多相关文章

  1. Scrapy shell调试网页的信息

    通过scrapy shell "http://www.thinkive.cn:10000/zentaopms/www/index.php?m=user&f=login"

  2. scrapy shell 中文网站输出报错.记录.

    UnicodeDecodeError: 'gbk' codec can't decode bytes in position 381-382: illegal multibyte sequence 上 ...

  3. 安装ipython,使用scrapy shell来验证xpath选择的结果 | How to install iPython and how does it work with Scrapy Shell

    1. scrapy shell 是scrapy包的一个很好的交互性工具,目前我使用它主要用于验证xpath选择的结果.安装好了scrapy之后,就能够直接在cmd上操作scrapy shell了. 具 ...

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

    Scrapy终端是一个交互终端,供您在未启动spider的情况下尝试及调试您的爬取代码. 其本意是用来测试提取数据的代码,不过您可以将其作为正常的Python终端,在上面测试任何的Python代码. ...

  5. Scrapy Shell的使用

    Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据. 如果安装了 IPyth ...

  6. 14.Scrapy Shell

    Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据. 如果安装了 IPyth ...

  7. scrapy shell的作用

    1.可以方便我们做一些数据提取的测试代码: 2.如果想要执行scrapy命令,那么毫无疑问,肯定是要先进入到scrapy所在的环境中: 3.如果想要读取某个项目的配置信息,那么应该先进入到这个项目中. ...

  8. Scrapy shell调试返回403错误

    一.问题描述 有时候用scrapy shell来调试很方便,但是有些网站有防爬虫机制,所以使用scrapy shell会返回403,比如下面 C:\Users\fendo>scrapy shel ...

  9. scrapy shell

    一.scrapy shell 1.安装pip install Jupyter 2.在pycharm中的启动命令: scrapy shell 注:启动后关键字高亮显示 3.查看response 执行sc ...

随机推荐

  1. Go语言_方法和接口

    方法和接口 本节课包含了方法和接口,可以用这种构造来定义对象及其行为. Go 作者组编写,Go-zh 小组翻译. https://tour.go-zh.org/methods/1 方法 Go 没有类. ...

  2. C#中XmlTextWriter读写xml文件详细介绍

    XmlTextWriter类允许你将XML写到一个文件中去.这个类包含了很多方法和属性,使用这些属性和方法可以使你更容易地处理XML.为了使用这个类,你必须首先创建一个新的XmlTextWriter对 ...

  3. k3 cloud中出现合计和汇总以后没有显示出来,合价要新增一行以后才出现值

    解决办法:找到对应字段,把及时触发值更新事件打上勾

  4. mySql | Error: ER_DATA_TOO_LONG: Data too long for column 'base_info' at row 1

    问题描述:执行insert语句报以下错误 原因:数据库表,该字段在设计的时候长度过小,新插入的数据过长,会提示以上错误! 解决办法:修改表中该字段的长度限定.

  5. Spike Your CPU’s Processor in .Net

    using System.Threading; using System.Runtime.InteropServices; // Target a specific processor for the ...

  6. windows安装 阿里云的Fun工具

    由于项目使用到了 函数计算,特此了解到了需要安装 阿里云的Fun工具 Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算.API 网关.日志服务等资源.它通过一个 ...

  7. java ArrayList的几种方法使用

    package java06; import java.util.ArrayList; /* ArrayList的常用的几个方法: public boolean add(E e) : 向集合汇总添加元 ...

  8. shell编程基础知识2

    1.一维数组 定义:A={test1 test2 test3} 引用:echo ${A[0]} 表示引用第一个数组变量 echo ${A[1]} 表示引用第二个数组变量 显示数据参数:echo ${A ...

  9. hover()函数的用法

    定义和用法 hover() 方法规定当鼠标指针悬停在被选元素上时要运行的两个函数. 实例 当鼠标指针悬停在上面时,改变 <p> 元素的背景颜色: $("p").hove ...

  10. HTTP协议缓存

    缓存的概念 缓存这个东西真的是无处不在, 有浏览器端的缓存, 有服务器端的缓存,有代理服务器的缓存, 有ASP.NET页面缓存,对象缓存. 数据库也有缓存, 等等. http中具有缓存功能的是浏览器缓 ...