广告
返回顶部
首页 > 资讯 > 后端开发 > Python >scrapy深入学习----(3)
  • 588
分享到

scrapy深入学习----(3)

scrapy 2023-01-31 07:01:00 588人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

最新版本 0.10.我们可以通过scrapy命令行工具来控制Scrapy, 这里我们使用了“Scrapy tool”这么一个词,用来区分他们的子命令,那些通常我们称为 “commands”,或者 “Scrapy commands”.处于各种

最新版本 0.10.

我们可以通过scrapy命令行工具来控制Scrapy, 这里我们使用了“Scrapy tool”这么一个词,用来区分他们的子命令,那些通常我们称为 “commands”,或者 “Scrapy commands”.

处于各种目的,Scrapy 工具提供了几个命令,每个都有一组可接受的的参数和选项。

Default structure of Scrapy projects

Scrapy工程的默认结构

在深入学习命令行工具和它的子命令之前,我们县来了解一下Scrapy工程的目录结构。

尽管这并不是固定的, 所有Scrapy工程在默认情况下都有相同的文件结构,像下面这样:

scrapy.cfg
myproject/
    __init__.py
    items.py
    pipelines.py
    settings.py
    spiders/
        __init__.py
        spider1.py
        spider2.py
        ...

文件 scrapy.cfg 所存在的目录就是这个工程的根目录。这个文件包含了定义工程属性的python模块的名称。下面是一个示例:

[settings]default = myproject.settings

Using the scrapy tool

使用scrapy工具

首先,你可以启动一个没有任何参数的Scrapy 工具,然后会显示一些使用帮助和可用的命令。

在命令行下输入scrapy,可以看到类似下面的内容:

Scrapy X.Y - no active project

Usage:
  scrapy <command> [options] [args]

Available commands:
  crawl         Run a spider
  fetch         Fetch a URL using the Scrapy downloader
[...]

如果你在运行Scrapy工程,那么第一行显示的是当前在处于活动状态的工程。上面是在工程外运行的状态,下面这个是在工程内运行的状态:

Scrapy X.Y - project: myproject

Usage:
  scrapy <command> [options] [args]

[...]

Creating projects

创建工程

一般来说要做得第一件事就是创建一个工程:

scrapy startproject myproject

执行这条命令,会创建一个路径 myproject 并且在这个路径中新建了一个 Scrapy工程。

下一步,进入这个工程的目录中:

cd myproject

此时,你应该准备好了使用 scrapy 命令来管理和控制你的工程。

Controlling projects

控制工程

在你的工程中使用 scrapy 工具来控制和管理它们。 

例如,让我们来新建一只小蛛:

scrapy genspider mydomain mydomain.com
会显示下面的内容:
Created spider 'mydomain' using template 'crawl' in module:
  myproject.spiders.mydomain


一些Scrapy 命令 (像crawl)必须在Scrapy工程的内部执行。要更详细的信息,请看一下 commands reference ,它会指导你那些必须在工程内部执行,哪些不必要。

同时你要注意,有些命令在工程的内部和外部执行时有一些细微的差别。 举个栗子, 如果抓取的url与一些特殊的小蛛有关联,fetch命令会采取覆写蛛行为(比如 user_agent 属性会覆盖 user-agent). 这种行为是故意的, 因为 fetch 命令本来就是用来检查小蛛们是如何来下载页面的。

Available tool commands

可用的工具命令

这一小节给出了程序所包含的内置命令的列表,并且给出了一些说明和使用示例。当然你要记得随时运行这些命令去获得更详细的信息: 

scrapy <command> -h

使用下面的命令来查看所有可用的命令:

scrapy -h

通常来说只有两种命令,一种是只在 Scrapy工程内部起作用的 (工程限定命令)。 另一种是无需活动工程的命令 (全局命令), 如果在工程内部运行这些命令可能会有小小的不同(他们会使用工程的内容来覆盖原先的设定).

全局命令:

  • startproject

  • settings

  • runspider

  • shell

  • fetch

  • view

  • version

工程限定的命令:

  • crawl

  • check

  • list

  • edit

  • parse

  • genspider

  • deploy

  • bench

startproject

启动项目

  • 语法: scrapy startproject <project_name>

  • 是否工程限定:no

创建一个名为 project_name的新Scrapy工程, 存放在project_name 目录下。

使用示例:

$ scrapy startproject myproject

genspider

情报蜘蛛

  • 语法:scrapy genspider [-t template] <name> <domain>

  • 是否工程限定: yes

在当前工程中创建一只蜘蛛。

这只是在预定义模板上定义蜘蛛的一个简短的命令(阉割版),这并不是创建蜘蛛的唯一办法。你完全可以不使用这些命令,而自己创建一个蜘蛛的源代码。

使用示例:

$ scrapy genspider -l
Available templates:
  basic
  crawl
  csvfeed
  xmlfeed

$ scrapy genspider -d basic
from scrapy.spider import Spider

class $classname(Spider):
    name = "$name"
    allowed_domains = ["$domain"]
    start_urls = (
        'Http://www.$domain/',
        )

    def parse(self, response):
        pass

$ scrapy genspider -t basic example example.com
Created spider 'example' using template 'basic' in module:
  mybot.spiders.example

crawl

抓取

  • 语法:scrapy crawl <spider>

  • 是否工程限定:yes

开启一个蜘蛛的爬行行为。

使用示例:

$ scrapy crawl myspider
[ ... myspider starts crawling ... ]

check

核查

  • 语法:scrapy check [-l] <spider>

  • 是否工程限定:yes

合同核查。

使用示例:

$ scrapy check -l
first_spider
  * parse
  * parse_item
second_spider
  * parse
  * parse_item

$ scrapy check
[FAILED] first_spider:parse_item
>>> 'RetailPricex' field is missing

[FAILED] first_spider:parse
>>> Returned 92 requests, expected 0..4

list

列表

  • 语法:scrapy list

  • 是否工程限定:yes

列出当前工程中所有可用的小蜘蛛。每行输出一个蜘蛛名。

使用示例:

$ scrapy list
spider1
spider2

edit

编辑

  • 语法:scrapy edit <spider>

  • 是否工程限定:yes

使用在 EDITOR 设置中定义的编辑器编辑给定的蜘蛛。

这个命令只是给出一个简单便捷的方法来处理最常见的情况,开发者可以根据自己的喜好来选择任何工具或IDE去编写和调试他的蜘蛛。

使用示例:

$ scrapy edit spider1

fetch

提取

  • 语法:scrapy fetch <url>

  • 是否工程限定:no

使用Scrapy的下载器来下载给定的URL并将其内容输出到标准输出。

关于这个命令最有趣的就是,如果是在工程内部,它会使用蜘蛛提供的方法去下载这个页面。例如,蜘蛛有一个 USER_AGENT属性覆盖了User Agent,那么这个命令就会使用蜘蛛的这个属性。 

所以这个命令可以用来测试你的蜘蛛如何去提取某个页面。

如果在工程外部使用,就不会应用某个蜘蛛的行为,它会使用 Scrapy默认的下载设定。

使用示例:

$ scrapy fetch --nolog http://www.example.com/some/page.html
[ ... html content here ... ]

$ scrapy fetch --nolog --headers http://www.example.com/
{'Accept-Ranges': ['bytes'],
 'Age': ['1263   '],
 'Connection': ['close     '],
 'Content-Length': ['596'],
 'Content-Type': ['text/html; charset=UTF-8'],
 'Date': ['Wed, 18 Aug 2010 23:59:46 GMT'],
 'Etag': ['"573c1-254-48c9c87349680"'],
 'Last-Modified': ['Fri, 30 Jul 2010 15:30:18 GMT'],
 'Server': ['Apache/2.2.3 (Centos)']}

view

总览

  • 语法:scrapy view <url>

  • 是否工程限定:no

在浏览器中打开一个给定的URL,你的Scrapy 蜘蛛会 “看看” 它。由于有时蜘蛛所“看到”的页面跟用户不同, 那么使用这个命令你可以来检查蜘蛛看到了什么,并确定这是否是你想要的。

使用示例:

$ scrapy view http://www.example.com/some/page.html
[ ... browser starts ... ]

shell

命令行解释器

  • 语法:scrapy shell [url]

  • 是否工程限定:no

启动Scrapy命令行解释器来处理给定的URL,如果没有给出URL会打开一个空的解释器。 更多信息请参见Scrapy shell 。

使用示例:

$ scrapy shell http://www.example.com/some/page.html
[ ... scrapy shell starts ... ]

parse

解析

  • 语法:scrapy parse <url> [options]

  • 是否工程限定:yes

提取给定URL并用控制它的蜘蛛来解析,通过选项来使用这个命令,如果没有给出选项则执行默认的parse选项

可支持的选项:

  • --callback or -c: 蜘蛛用回调作为解析响应的方法

  • --rules or -r:使用 CrawlSpider 规则 来发现用于解析响应的回调方法 (ie. spider method)

  • --noitems: 不显示抓取到的项目

  • --nolinks: 不显示抓取到的链接

  • --depth or -d: 请求的递归深度等级 (默认是:1)

  • --verbose or -v: 根据每个深度等级显示信息

使用示例:

$ scrapy parse http://www.example.com/ -c parse_item
[ ... scrapy log lines crawling example.com spider ... ]

>>> STATUS DEPTH LEVEL 1 <<<
# Scraped Items  ------------------------------------------------------------
[{'name': u'Example item',
 'cateGory': u'Furniture',
 'length': u'12 cm'}]

# Requests  -----------------------------------------------------------------
[]

settings

设置

  • 语法:scrapy settings [options]

  • 是否工程限定:no

获取Scrapy 设定的值。

如果在工程内部,它会显示工程的设定值,如果在工程外部,它会显示Scrapy 的默认设定值。

使用示例:

$ scrapy settings --get BOT_NAME
scrapybot
$ scrapy settings --get DOWNLOAD_DELAY
0

runspider

运行蜘蛛

  • 语法:scrapy runspider <spider_file.py>

  • 是否工程限定:no

不创建工程,在Python文件中独立的运行一个蜘蛛。

使用示例:

$ scrapy runspider myspider.py
[ ... spider starts crawling ... ]

version

版本

  • 语法: scrapy version [-v]

  • 是否工程限定:no

打印出Scrapy版本。如果使用后缀 -v, it它还会显示Python, Twisted 和 操作系统等相关内容的信息, 这对于错误报告是很有用的。

deploy

部署

最新版本 0.11.

  • 语法:scrapy deploy [ <target:project> | -l <target> | -L ]

  • 是否工程限定:yes

部署给定工程到Scrapyd服务器. 详情参见 Deploying your project.

bench

最新版本0.17.

  • 语法:scrapy bench

  • 是否工程限定:no

启动快速基准检查程序测试 。参见 Benchmarking.

Custom project commands

定制工程命令

通过 COMMANDS_MODULE 设定,你也可以添加自定义的工程命令。在 scrapy/commands 查看Scrapy命令的例子,用以参考如何实现你自己的命令。

COMMANDS_MODULE

命令模块

默认: '' (空字符串)

使用一个模块来查看Scrapy 自定义命令。这个是用来给Scrapy工程添加你的自定义命令的。 

示例:

COMMANDS_MODULE = 'mybot.commands'


--结束END--

本文标题: scrapy深入学习----(3)

本文链接: https://www.lsjlt.com/news/191888.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • scrapy深入学习----(3)
    最新版本 0.10.我们可以通过scrapy命令行工具来控制Scrapy, 这里我们使用了“Scrapy tool”这么一个词,用来区分他们的子命令,那些通常我们称为 “commands”,或者 “Scrapy commands”.处于各种...
    99+
    2023-01-31
    scrapy
  • scrapy入门学习(原理)
    什么是网络爬虫网络爬虫又称网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。如果有兴趣可查看百度百科网络爬虫网络蜘蛛(web spider)也叫网络爬虫,是一种'自动化浏览网络'的程序,或者说是...
    99+
    2023-01-30
    入门 原理 scrapy
  • sqlmap深入学习
    整理下关于sql注入的资料链接学习链接:part1:http://www.freebuf.com/sectool/77948.htmlpart2:http://www.freebuf.com/sectool...
    99+
    2022-10-18
  • redis深入学习
    Redis持久化 官方文档: https://redis.io/topics/persistence 1.RDB和AOF优缺点 RDB: 可以在指定的时间间隔内生成数据集的时间点快照,把当前内存里的状态快照到磁盘上 优点: 压缩格...
    99+
    2015-11-22
    redis深入学习
  • Django 入门学习(3)
    在例4的基础上,我希望直接保存数据到数据库中。 Django自带了一个sqlite的数据库,已经配置好了 可以直接使用。使用方式和sqlalchemy类似,相当于一个内置的ORM框架。settings.py 默认已经绑定了sqlite3DA...
    99+
    2023-01-31
    入门 Django
  • Python深度学习 深度学习入门基于
    《Python深度学习》由Keras之父、现任Google人工智能研究员的弗朗索瓦•肖莱(François Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,涉及计算机视觉、自然语言处理、生成式模型等应用。书...
    99+
    2023-01-31
    深度 入门 Python
  • CDB/PDB深入学习
    改变PDB大小SQL> show pdbs ...
    99+
    2022-10-18
  • linux 基础学习入门 3
    linux day 3第三天内容并不明确, 自我总结内部命令 用 help command   或  man bash外部命令 用 command --help 或  command -h使用手册 man command信息页 info c...
    99+
    2023-01-31
    入门 基础 linux
  • PyTorch 深度学习入门
    💂 个人网站:【 海拥】【萌怪大冒险】【2048】🤟 风趣幽默的前端学习课程:👉28个案例趣学前端💅 想寻找共同学习交流、摸鱼划水的...
    99+
    2023-09-25
    pytorch 深度学习 python
  • python scrapy学习笔记
    scrapy是python最有名的爬虫框架之一,可以很方便的进行web抓取,并且提供了很强的定制型。一、安装scrapy# pip install scrapy二、基本使用1、初始化scrapy项目# scrapy startproject...
    99+
    2023-01-31
    学习笔记 python scrapy
  • socket.io学习教程之深入学习篇(三)
    前言 socket.io提供了基于事件的实时双向通讯,本文深入的介绍了socket.io,下面来看看详细的内容吧。 静态文件 socket.io默认情况下会通过socket.io-client包提供soc...
    99+
    2022-06-04
    教程 socket io
  • opencv深入浅出了解机器学习和深度学习
    目录机器学习kNN算法图解kNN算法用kNN算法实现手写数字识别SVM算法图解SVM算法使用SVM算法识别手写数据k均值聚类算法图解k均值聚类算法使用k均值聚类算法量化图像颜色深度学...
    99+
    2022-11-13
  • 深入学习JavaScript中的promise
    目录为什么要用Promise?使用Promise解决异步控制问题Promise的结构回调函数为什么异步代码一定是回调函数结构?刨析Promise原型方法——c...
    99+
    2022-11-13
  • Python struct模块-深入学习
    Python struct模块 用处struct模块中的函数格式化字符串 对齐方式格式符code使用示例Python参考手册struct模块链接 转载请标明出处(http://blog.csdn.net/lis_12/a...
    99+
    2023-01-31
    模块 Python struct
  • 深入学习java之泛型
    概念:泛型,即“参数化类型”。就是将原来具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。本质:为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不...
    99+
    2017-12-30
    java入门 java 泛型
  • 深入学习Android中的Intent
    Intent提供了一种通用的消息系统,它允许在你的应用程序见传递Intent来执行动作和产生事件,使用Intent可以激活Android应用的三种类型的核心组件:活动Activ...
    99+
    2022-06-06
    intent Android
  • 深入学习C#多线程
    目录一、基本概念1、进程2、线程二、多线程2.1System.Threading.Thread类2.2 线程的常用属性2.2.1线程的标识符2.2.2线程的优先级别2.2....
    99+
    2022-11-13
  • 深入学习java8 中的CompletableFuture
    目录1 前言2 简单使用3 异步处理3.1 thenApply3.2 thenAccept 和 thenRun3.3 exceptionally 异常处理3.4 whenComple...
    99+
    2022-11-13
  • vue3深入学习 nextTick和historyApiFallback
    目录1、nextTick2、historyApiFallback1、nextTick  官方解释:将回调推迟到下一个 DOM 更新周期之后执行。在更改了一些数据以等待 DO...
    99+
    2022-11-13
    vue3  nextTick vue3  historyApiFallback
  • python scrapy学习笔记(二)
    使用scrapy批量抓取,参考http://python.jobbole.com/87155一、创建项目# scrapy startproject comics创建完成后的目录结构. ├── comics │   ├── __init__....
    99+
    2023-01-31
    学习笔记 python scrapy
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作