上一节我们了解了如何安装Scrapy,安装后如何用呢?这节开始学习。 在Scrapy中提供一个命令行工具,可以控制scrapy进行各种操作,实现不同功能。本节要先学习这个命令行工具,这样我们就能快速创建scrapy项目和爬虫程序,并进行相关调试和运行。
配置文件 Scrapy有一个默认的配置参数文件叫“scrapy.cfg”,scrapy默认会从这个文件中读取配置参数,该配置文件的标准存放路径有以下三种:
系统级路径:/etc/scrapy.cfg
(Linux或Mac)或C:\scrapy\scrapy.cfg
(Windows)
用户级:~/.config/scrapy.cfg
($XDG_CONFIG_HOME
) 和 ~/.scrapy.cfg
($HOME
)
项目级:创建项目根目录下的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 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_domains
和start_urls
属性的
-t template
是可选参数,用于指定使用的模板
-l
查询可用的模板
例子
$ scrapy genspider -l Available templates: basic crawl csvfeed xmlfeed $ scrapy genspider example example.com $ scrapy genspider -t crawl scrapyorg scrapy.org
settings
语法:scrapy settings [options]
说明
作用:查询Scrapy设置,如果是在爬虫程序文件夹中,则显示爬虫程序设置,如果是在根目录则显示默认的Scrapy设置
options参数说明
-h
显示帮助信息
--get
输出原始设置值
--getbool
、--getint
、--getfloat
、--getlist
分别是输出布尔值、整型、浮点型、列表的设置值,这几个基本不用,因为参数值不是对应的类型会直接报错
例子
$ scrapy settings --get BOT_NAME scrapybot $ 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/' ) $ scrapy shell --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)' (200 , 'http://example.com/' ) $ 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>
说明
例子
$ 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 spider1 spider2
edit
语法:scrapy edit <spider>
说明
作用:使用 EDITOR 环境变量中定义的编辑器或(如果未设置)EDITOR 设置编辑给爬虫。
例子
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 <<<[{'name' : 'Example item' , 'category' : 'Furniture' , 'length' : '12 cm' }] []
bench
语法:scrapy bench
说明
作用:对Scrapy做压力测试,可以帮助开发者找出性能瓶颈和优化空间,提高爬虫的效率和稳定性。
自定义项目命令 Scrapy支持使用COMMANDS_MODULE
模块设置自己的项目命令。 如何实现可参考scrapy/commands 的实践方法。 然后在项目的settings文件中配置COMMANDS_MODULE = "mybot.commands"
来添加自定义命令。 以上就是对Scrapy命令行工具的说明,有不明确的地方,可参考官方文档