当前位置: 首页 > article >正文

【Scrapy】Scrapy教程4——命令行工具

文章目录

  • 配置文件
  • Scrapy的默认项目结构
  • Scrapy命令行的使用
    • 查看帮助
    • 准备项目
    • 可用命令
      • 全局命令Global Commands
        • startproject
        • genspider
        • settings
        • runspider
        • shell
        • fetch
        • view
        • version
      • 项目命令Project-only Commands
        • crawl
        • check
        • list
        • edit
        • parse
        • bench
    • 自定义项目命令

上一节我们了解了如何安装Scrapy,安装后如何用呢?这节开始学习。
在Scrapy中提供一个命令行工具,可以控制scrapy进行各种操作,实现不同功能。本节要先学习这个命令行工具,这样我们就能快速创建scrapy项目和爬虫程序,并进行相关调试和运行。

配置文件

Scrapy有一个默认的配置参数文件叫“scrapy.cfg”,scrapy默认会从这个文件中读取配置参数,该配置文件的标准存放路径有以下三种:

  1. 系统级路径:/etc/scrapy.cfg(Linux或Mac)或C:\scrapy\scrapy.cfg(Windows)
  2. 用户级:~/.config/scrapy.cfg ($XDG_CONFIG_HOME) 和 ~/.scrapy.cfg ($HOME)
  3. 项目级:创建项目根目录下的scrapy.cfg
    其中项目级的优先级最高,其次是用户级和系统级,简单来讲项目级>用户级>系统级,所以通常我们默认只用项目级的。
    Scrapy也可以理解一些配置的环境变量,如:
  • SCRAPY_SETTINGS_MODULE用来设置python的scrapy模块路径
  • SCRAPY_PROJECT用来设置scrapy使用的爬虫程序
  • SCRAPY_PYTHON_SHELL用来设置所使用的shell环境

Scrapy的默认项目结构

在继续进行命令行工具讲解前,还有一个需要了解的,就是Scrapy的默认文件结构,如果不了解这个结构,我们使用命令行时可能会在错误的路径执行,造成命令找不到指定的文件而报错,Scrapy默认的文件结构如下所示:

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

scrapy的命令行工具,默认使用的是项目根目录(即上面的最外层目录),因为scrapy的配置文件scrapy.cfg也在根目录下。
scrapy.cfg文件中有下面一行配置,用来设置默认使用的爬虫程序。

[settings]
default = myproject.settings

如果有多个项目在同一个文件夹下,那么可以在scrapy.cfg文件中添加如下设置:

[settings]
default = myproject1.settings
project1 = myproject1.settings
project2 = myproject2.settings

然后使用export SCRAPY_PROJECT=project2来设置使用的项目。

Scrapy命令行的使用

查看帮助

我们可以直接在安装了scrapy的python环境下,直接输入scrapy就可以显示scrapy的帮助信息,如下所示,和命令scrapy -h作用一样,注意如果和我一样用的是虚拟环境,需要先进入虚拟环境再执行。

(venv_scrapy) D:\Code\scrapyTutorial>scrapy
Scrapy 2.11.2 - no active project

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

Available commands:
  bench         Run quick benchmark test
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

  [ more ]      More commands available when run from project directory

Use "scrapy <command> -h" to see more info about a command

在上面的帮助信息中,第一行会显示我们安装的scrapy的版本和已激活的项目,下面是scrapy的用法,和可用的命令有哪些,最后一行还提示了如果想相信了解某个命令的详细信息,可以使用scrapy <command> -h来查看每个命令的帮助。

准备项目

后面为了逐一讲解每个命令的作用的,我们需要先有个可以用的项目才能继续讲解,因此先来看如何创建项目和操作项目。
创建项目可以使用命令

scrapy startproject myproject [project_dir]

这个命令将会在project_dir目录下创建一个scrapy的项目,并且项目名称为myproject,如果project_dir省略不指定,则会自动创建一个和项目名称相同的目录。
创建好项目后,需要进入到project_dir目录,即项目根目录对scrapy的项目进行操作。如创建新的爬虫程序:

cd myproject  # 进入scrapy根目录
scrapy genspider mydomain mydomain.com  # 创建爬虫

这里要注意区分下,有scrapy.cfg文件的是根目录,若执行startproject时没指定project_dir,则在根目录下会有一个和项目名称相同的文件夹,这是个默认的爬虫程序目录。
为了方便理解,后面我会把startproject创建的根目录称为项目目录,该目录下包含scrapy的参数配置文件和爬虫程序目录。
爬虫程序就是根目录下创建的文件夹,我称为爬虫程序,因为后面开发爬虫时,主要在这些文件中编写,爬虫程序目录名称可能和根目录名称相同(startproject时不指定project_dir就会相同),一个项目目录中可能有多个爬虫程序目录,每个爬虫程序目录中都包含了爬虫文件、中间件文件、items文件、pipelines文件、设置文件等。
执行爬虫时,可使用scrapy.cfg文件对默认的爬虫程序进行切换,还可通过设置SCRAPY_PROJECT环境变量指定使用的爬虫程序。

可用命令

scrapy中分全局命令(Global commands)和项目命令(Project-only commands)两种,什么意思呢?全局命令只要在scrapy项目的根目录或子目录中都可以使用,而项目命令必须切换到项目目录下才能执行。

全局命令Global Commands

startproject
  • 语法:scrapy startproject <project_name> [project_dir]
  • 说明:创建项目,在project_dir目录下创建新的Scrapy项目,命名为project_name,其中project_dir可以省略,默认会在当前目录下创建一个和project_name同名的文件夹作为project_dir。
  • 例子:scrapy startproject myproject
genspider
  • 语法:scrapy genspider [-t template] <name> <domain or URL>
  • 说明
    • 作用:在当前文件夹(非项目文件夹内)或当前项目爬虫文件夹(必须项目文件夹内)创建一个新的爬虫,创建爬虫时不一定必须使用这个命令,也可以自己手动创建爬虫文件。
    • 参数说明
      • name是爬虫名字
      • domain or URL是生成allowed_domainsstart_urls属性的
      • -t template是可选参数,用于指定使用的模板
      • -l查询可用的模板
  • 例子
# 查询可用的模板
$ scrapy genspider -l
Available templates:
  basic
  crawl
  csvfeed
  xmlfeed

# 使用basic模板创建example爬虫
$ scrapy genspider example example.com

# 使用crawl模板创建scrapyorg爬虫
$ scrapy genspider -t crawl scrapyorg scrapy.org
settings
  • 语法:scrapy settings [options]
  • 说明
    • 作用:查询Scrapy设置,如果是在爬虫程序文件夹中,则显示爬虫程序设置,如果是在根目录则显示默认的Scrapy设置
    • options参数说明
      • -h显示帮助信息
      • --get输出原始设置值
      • --getbool--getint--getfloat--getlist分别是输出布尔值、整型、浮点型、列表的设置值,这几个基本不用,因为参数值不是对应的类型会直接报错
  • 例子
# 查询BOT_NAME
$ scrapy settings --get BOT_NAME
scrapybot

# 查询DOWNLOAD_DELAY时间
$ scrapy settings --get DOWNLOAD_DELAY
0
runspider
  • 语法:scrapy runspider <spider_file.py>
  • 说明
    • 作用:单独运行一个爬虫文件,不必创建项目
  • 例子
scrapy runspider scrapyorg.py
shell
  • 语法:scrapy shell [url]
  • 说明
    • 作用:启动scrapy的交互模式,如果指定url则启动交互模式时会自动爬取该url;如果不指定url,则只启动交互模式,不会下载任何页面。url也可替换成本地的文件。该模式下可以用来调试代码,如验证选择器编写的是否正确等。
    • 参数说明
      • --spider=SPIDER指定要使用的爬虫文件
      • -c code执行代码并打印代码的执行结果
      • --no-redirect不遵循重定向
      • --nolog不打印日志,新手不建议使用,因为交互模式启动后会打印很多提示信息,包括可以使用的命令
  • 例子
$ scrapy shell http://www.example.com/some/page.html
[ ... scrapy shell starts ... ]

$ scrapy shell --nolog http://www.example.com/ -c (response.status, response.url)
(200, 'http://www.example.com/')

# shell follows HTTP redirects by default
$ scrapy shell --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'
(200, 'http://example.com/')

# you can disable this with --no-redirect
# (only for the URL passed as command line argument)
$ scrapy shell --no-redirect --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c (response.status, response.url)
(302, 'http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F')
fetch
  • 语法:scrapy fetch <url>
  • 说明
    • 作用:使用Scrapy下载器下载指定的url,并输出到屏幕。这个命令可以展示爬虫如何获取页面,如获取请求头。
    • 参数
      • --spider=SPIDER指定要使用的爬虫文件
      • --headers打印请求头,而不是请求体
      • --no-redirect不遵循重定向
  • 例子
$ 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>
  • 说明
    • 作用:在浏览器中打开指定的url,用于调试代码,如你想要的结果和spider找到的是否一致
    • 参数
      • --spider=SPIDER指定要使用的爬虫文件
      • --no-redirect不遵循重定向
  • 例子
$ scrapy view http://www.example.com/some/page.html
[ ... browser starts ... ]
version
  • 语法:scrapy version [-v]
  • 说明
    • 作用:打印Scrapy的版本信息
    • 参数
      • -v除了显示Scrapy的版本信息,还显示Python、Twisted等依赖包的版本信息和平台信息。
  • 例子
$ scrapy version
Scrapy 2.11.2

$ scrapy version -v
Scrapy       : 2.11.2
lxml         : 5.3.0.0
libxml2      : 2.11.7
cssselect    : 1.2.0
parsel       : 1.9.1
w3lib        : 2.2.1
Twisted      : 24.10.0
Python       : 3.11.4 (tags/v3.11.4:d2340ef, Jun  7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)]
pyOpenSSL    : 24.2.1 (OpenSSL 3.3.2 3 Sep 2024)
cryptography : 43.0.3
Platform     : Windows-10-10.0.22631-SP0

项目命令Project-only Commands

crawl
  • 语法:scrapy crawl <spider>
  • 说明
    • 作用:启动爬虫的爬取
    • 参数
      • -h, --help显示帮助文件
      • -a NAME=VALUE设置爬虫参数
      • --output FILE-o FILE添加爬取的项目到文件末尾,使用-用作标准输出,用冒号设置输出格式-o FILE: FORMAT
  • 例子
$ scrapy crawl myspider
[ ... myspider starts crawling ... ]

$ scrapy crawl -o myfile:csv myspider
[ ... myspider starts crawling and appends the result to the file myfile in csv format ... ]

$ scrapy crawl -O myfile:json myspider
[ ... myspider starts crawling and saves the result in myfile in json format overwriting the original content... ]

$ scrapy crawl -o myfile -t csv myspider
[ ... myspider starts crawling and appends the result to the file myfile in csv format ... ]
check
  • 语法:scrapy check [-l] <spider>
  • 说明
    • 作用:检查是否有语法错误
    • 参数
      • -l列出所有可用的检查器
  • 例子
$ 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
  • 说明
    • 作用:列出当前项目所有可用的爬虫
  • 例子
$ scrapy list
spider1
spider2
edit
  • 语法:scrapy edit <spider>
  • 说明
    • 作用:使用 EDITOR 环境变量中定义的编辑器或(如果未设置)EDITOR 设置编辑给爬虫。
  • 例子
$ scrapy edit spider1
parse
  • 语法:scrapy parse <url> [options]
  • 说明
    • 作用:获取指定的URL并传给爬虫处理,使用--callback参数指定回调函数。可以用来验证我们写的回调函数是否正确。
    • 参数
      • --spider=SPIDER指定要使用的爬虫文件
      • -a NAME=VALUE设置爬虫参数
      • --callback-c指定回调函数
      • --meta-m附加传给回调函数的请求meta,必须是json字符串,如–-meta='{"foo" : "bar"}'
      • --cbkwargs附加传给回调函数的参数,必须是json字符串,如–-cbkwargs='{"foo" : "bar"}'
      • --pipelines通过pipelines处理items
      • --rules-r使用CrawlSpider规则寻找回调函数
      • --noitems不显示爬虫项目items
      • --nolinks不显示提取的链接
      • --nocolour不实用高亮输入内容
      • --depth-d请求需要递归的层数
      • --verbose-v显示每层的信息
      • --output-o存储爬取的items到文件
  • 例子
$ scrapy parse http://www.example.com/ -c parse_item
[ ... scrapy log lines crawling example.com spider ... ]

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

# Requests  -----------------------------------------------------------------
[]
bench
  • 语法:scrapy bench
  • 说明
    • 作用:对Scrapy做压力测试,可以帮助开发者找出性能瓶颈和优化空间,提高爬虫的效率和稳定性。

自定义项目命令

Scrapy支持使用COMMANDS_MODULE模块设置自己的项目命令。
如何实现可参考scrapy/commands的实践方法。
然后在项目的settings文件中配置COMMANDS_MODULE = "mybot.commands"来添加自定义命令。

以上就是对Scrapy命令行工具的说明,有不明确的地方,可参考官方文档

欢迎大家在各大平台关注我,我会不定期发布技术相关文章和各种小工具,并且欢迎共同技术探讨!
在这里插入图片描述


http://www.kler.cn/a/554105.html

相关文章:

  • 实现一个专注应用-后端开发(一)-搭建
  • QML Image 圆角设置
  • 从猜想终结到算法革新,弹性哈希开启数据存储新篇章
  • docker run --ipc=host参数含义
  • UniApp 面试题 超基础
  • C++效率掌握之STL库:vector函数全解
  • ubuntu 创建交换分区 或者扩容交换分区
  • 鸿蒙中,UIAbility组件启动模式(3种分别是Singleton(单实例模式)Multiton(多实例模式)Specified(指定实例模式))
  • Python常见面试题的详解13
  • 解决 Nginx 代理后 HTTP 头部丢失的问题:以 access_token 为例
  • 【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑤】
  • rust学习五、认识所有权
  • unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake
  • 图解MySQL【日志】——Buffer Pool
  • Java Applet 学习笔记(详细版)
  • Redis 过期键(expires)机制详解
  • Linux 内存管理与文件页缓冲区
  • 【二分搜索 C/C++】洛谷 P1873 EKO / 砍树
  • Redis7——基础篇(二)
  • 前端504错误分析