在开发爬虫的使用,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. 2019牛客暑期多校训练营(第二场) - H - Second Large Rectangle - dp

    https://ac.nowcoder.com/acm/contest/882/H 正确的办法:dp1[i][j]表示以i,j为底的矩形的高.得到dp1之后,dp2[i][j]表示以dp1[i][j] ...

  2. Zookeeper——启动闪退

      Zookeeper好久不启动了,昨天项目要用Zookeeper了,我昨天突然启动它,调皮的zk居然害羞不让我看见它,启动不了,一启动就闪退,为啥呢?其实是因为报错了,有错zk启动时就会报错,所以昨 ...

  3. OpenLayers绘制地图,无需外网,内网访问,提高安全性。

    1. 首先引入ol ,npm i --save ol 2. 创建地图 一个地图初步就这样完成了. 3. 怎么与后台进行交互? 具体参考文档:http://weilin.me/ol3-primer/ch ...

  4. ORACLE USER视图

    select  *  from  USER_ALL_TABLES  -- 包含对用户可用的表的描述. select  *  from USER_ARGUMENTS  --列出对用户可存取的对象中的参数 ...

  5. 为什么需要在 React 类组件中为事件处理程序绑定this?

    https://juejin.im/post/5afa6e2f6fb9a07aa2137f51 事件绑定作为回调函数参数传递给函数,丢失其上下文,执行的是默认绑定,不是隐式绑定 类声明和类表达式的主体 ...

  6. vue图片预加载

    目的: 图片预加载能够使得用户在浏览后续页面的时候,不会出现图片加载一半导致浏览不流畅的情况. 一.方法一 项目打开的时候要对图片进行预加载,在App.vue里面的beforeCreate添加预加载程 ...

  7. 有关css的兼容问题

    兼容性 1    页面在不同浏览器中可能显示不同  在IE6下 子级的宽度会撑开父级设置好的宽度   温馨提示:和模型的计算一定要精确,IE浏览器可能显示不同   兼容性 2    在IE6中,元素浮 ...

  8. 20180308-Python内置方法

    先大致粗略的说一下反射的概念,不是很准确,后续详细讲解: 1. 以字符串的形式,导入模块 2. 以字符串的形式,获取模块内部的函数,并执行 通常我们想在一个模块中导入另外一个模块,则需要通过 impo ...

  9. 三、MVC_JsonResult类型

    一.Ajax或者页面请求获取数据,不通过WebApi的时候,使用JsonResult作为返回Json数据格式的类型 二.代码呈现 public class HomeController : Contr ...

  10. getString()方法与getObject()方法的区别

    JDBC提供了getString().getInt()和getData()等方法从ResultSet中获取数据,当查询结果集中的数据量较小时,不用考虑性能,使用这些方法完全可以满足需求,但是当Resu ...