主页 > 创业  > 

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

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

文章目录 配置文件Scrapy的默认项目结构Scrapy命令行的使用查看帮助准备项目可用命令全局命令Global Commandsstartprojectgenspidersettingsrunspidershellfetchviewversion 项目命令Project-only Commandscrawlchecklisteditparsebench 自定义项目命令

上一节我们了解了如何安装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根目录 scrapy genspider mydomain mydomain # 创建爬虫

这里要注意区分下,有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 # 使用basic模板创建example爬虫 $ scrapy genspider example example # 使用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:// .example /some/page.html [ ... scrapy shell starts ... ] $ scrapy shell --nolog http:// .example / -c (response.status, response.url) (200, 'http:// .example /') # shell follows HTTP redirects by default $ scrapy shell --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample %2F -c '(response.status, response.url)' (200, 'http://example /') # 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 %2F -c (response.status, response.url) (302, 'http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample %2F') fetch 语法:scrapy fetch <url>说明 作用:使用Scrapy下载器下载指定的url,并输出到屏幕。这个命令可以展示爬虫如何获取页面,如获取请求头。参数 --spider=SPIDER指定要使用的爬虫文件--headers打印请求头,而不是请求体--no-redirect不遵循重定向 例子 $ scrapy fetch --nolog http:// .example /some/page.html [ ... html content here ... ] $ scrapy fetch --nolog --headers http:// .example / {'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:// .example /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:// .example / -c parse_item [ ... scrapy log lines crawling example 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 mands"来添加自定义命令。

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

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

标签:

【Scrapy】Scrapy教程4——命令行工具由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【Scrapy】Scrapy教程4——命令行工具