Scrapy 命令行工具
管理 Scrapy 项目需要借助 Scrapy 命令行工具来执行,比如:创建项目,运行爬虫等。Scrapy 命令分为两种:全局命令和项目命令。全局命令可以在你电脑任何位置使用,而项目命令只能在项目目录中使用。
1. Scrapy 命令列表
在 Shell 中运行不带任何参数的 scrapy,可以列出所有支持的命令:
$ scrapy Scrapy 2.3.0 - no active project Usage: scrapy[options] [args] Available commands: bench Run quick benchmark test check Check spider contracts commands crawl Run a spider edit Edit spider fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates list List available spiders parse Parse URL (using its spider) and print the results 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
以上的 Scrapy 命令分为两种:全局命令和项目命令。
1)全局命令
- startproject
- genspider
- settings
- runspider
- shell
- fetch
- view
- version
2)项目命令
- crawl
- check
- list
- edit
- parse
- bench
2. startproject 命令
语法:scrapy startproject <project_name> [project_dir]
含义:创建一个新的Scrapy项目,名称为 project_name ,爬虫文件位于 project_dir 目录下。如果 project_dir 目录不存在,那么目录就会变成项目名。
使用案例:
$ scrapy startproject myproject
3. genspider 命令
语法:scrapy genspider [-t template] <name> <domain>
含义:在当前文件夹或者在当前项目的爬虫文件夹中,新建一个爬虫。如果是在一个项目当中,这个<name>参数将被当成爬虫的名字,<domain>用来创建爬虫里面的 allowed_domains 和 start_urls 的属性值。
使用案例:
$ scrapy genspider -l Available templates: 四种模板 basic crawl csvfeed xmlfeed $ scrapy genspider example example.com 创建 example 爬虫,并且默认使用 basic 模板。 $ scrapy genspider -t crawl scrapyorg scrapy.org 创建 scrapyorg 模板,并且使用 crawl 模板。
4. crawl 命令
语法:scrapy crawl <spider>
含义:运行爬虫
使用案例:
$ scrapy crawl myspider
5. check 命令
语法:scrapy check [-l] <spider>
含义:运行contract检查,检查你项目中的错误之处。
使用案例:
$ 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
6. list 命令
语法:scrapy list
含义:列举出当前项目的爬虫
使用案例:
$ scrapy list spider1 spider2
7. edit 命令
语法:scrapy edit <spider>
含义:编辑爬虫代码,实际上就是vim模式,但是这种方式并不怎么好用,还不如用IDE去写爬虫。
使用案例:
$ scrapy edit spider1
8. fetch 命令
语法:scrapy fetch <url>
含义:使用Scrapy下载器下载指定的URL,并将获得的内容输出,通俗的来说就是打印出网站的HTML源码。
使用实例:
$ scrapy fetch --nolog http://www.example.com/some/page.html [ ... html content here ... ]
9. view 命令
语法:scrapy view <url>
含义:在你的默认浏览器中打开给定的URL,并以Scrapy spider获取到的形式展现。 有些时候spider获取到的页面和普通用户看到的并不相同,一些动态加载的内容是看不到的, 因此该命令可以用来检查spider所获取到的页面。
使用案例:
$ scrapy view http://www.example.com/some/page.html [ ... browser starts ... ]
10. shell 命令
语法:scrapy shell [url]
含义:启动Scrapy Shell 来打开url,可以进行一些测试
使用案例:
$ scrapy shell http://www.baidu.com [ ... scrapy shell starts ... ]
11. parse 命令
语法:scrapy parse <url> [options]
含义:输出格式化内容
Supported options:
- --spider=SPIDER: 自动检测爬虫、强制使用特定爬虫
- --a NAME=VALUE: 设置爬虫的参数(可重复)
- --callback or -c: 用作解析响应的回调的爬虫方法
- --meta or -m: 传递给回调请求的附加请求元。必须是有效的JSON字符串。示例:–meta='“foo”:“bar”
- --pipelines: 通过管道处理项目
- --rules or -r: 使用crawlspider规则发现用于解析响应的回调(即spider方法)
- --noitems: 不显示items
- --nolinks: 不显示提取的链接
- --nocolour: 避免使用Pygments对输出着色
- --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': 'Example item', 'category': 'Furniture', 'length': '12 cm'}] # Requests ----------------------------------------------------------------- []
12. settings 命令
语法:scrapy settings [options]
含义:拿到Scrapy里面的设置属性
使用案例:
$ scrapy settings --get BOT_NAME scrapybot $ scrapy settings --get DOWNLOAD_DELAY 0
13. runspider 命令
语法:scrapy runspider <spider_file.py>
含义:运行一个含有爬虫的python文件,不需要是一个scrapy项目
使用案例:
$ scrapy runspider myspider.py [ ... spider starts crawling ... ]
14. version 命令
语法:scrapy version [-v]
含义:查看Scrapy版本
使用案例:
scrapy version Scrapy 1.6.0
15. bench 命令
语法:scrapy bench
含义:测试电脑当前爬取速度性能
Scrapy Shell 是一个交互式的 Python 终端,提供在未启动 Spider 的情况下调试爬虫代码,主要用来测试 XPath 或 CSS 表达式,查看它们的工作方式以及从网页中提取的数据。