Scrapy是由scrapy命令行工具来控制的,它的命令行工具为多种用途提供了一些不同的命令,每一个命令都有不同的参数和选项。
一些Scrapy命令必须在Scrapy项目目录下执行,另一些可以在任何目录下执行。而那些可以在任何目录下执行的命令,如果在Scrapy项目目录下执行可能会有些不同。
Global commands | Project-only commands |
startproject | crawl |
genspider | check |
settings | list |
runspider | edit |
shell | parse |
fetch | bench |
view | |
version |
1. scrapy
首先运行Scrapy命令行工具但没有任何命令,它会输出一些用法和可以使用的命令到屏幕上:
(scrapyEnv) MacBook-Pro:~ $ scrapy
Scrapy 1.4.0 - 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
(scrapyEnv) MacBook-Pro:~ $
如果是在一个Scrapy项目的目录里运行的命令,则第一行显示的是当前的项目,如果不在任何Scrapy项目下,则显示"no active project"
想了解命令更多的信息可以使用:scrapy <command> -h
(scrapyEnv) MacBook-Pro:myproject$ scrapy startproject -h
Usage
=====
scrapy startproject <project_name> [project_dir]
Create new project
Options
=======
--help, -h show this help message and exit
Global Options
--------------
--logfile=FILE log file. if omitted stderr will be used
--loglevel=LEVEL, -L LEVEL
log level (default: DEBUG)
--nolog disable logging completely
--profile=FILE write python cProfile stats to FILE
--pidfile=FILE write process ID to FILE
--set=NAME=VALUE, -s NAME=VALUE
set/override setting (may be repeated)
--pdb enable pdb on failure
(scrapyEnv) MacBook-Pro:myproject $
2. scrapy startproject
- Syntax: scrapy startproject <project_name> [project_dir]
- Requires project: no
创建scrapy项目。
(scrapyEnv) MacBook-Pro:Project $ scrapy startproject myproject [project_dir]
将会新建一个Scrapy项目在project_dir目录下。如果project_dir没有指定,则默认的目录为myproject。
然后进入新建项目的目录,现在我们可以使用scrapy的命令管理、控制新建的scrapy项目。
这里要介绍两个方面的知识:
2.1 配置设定
Scrapy的配置都保存在scrapy.cfg文件中,这个文件可能出现在3个地方:
1. /etc/scrapy.cfg 或 c:\scrapy\scrapy.cfg (系统级的配置)
2. ~/.config/scrapy.cfg ($XDG_CONFIG_HOME) 和 ~/.scrapy.cfg ($HOME) (用户级的配置)
3. scrapy.cfg 在scrapy项目的根目录下(项目级的配置)
这些配置都会合并到一起并按3>2>1的顺序排列,即3的优先级>2的优先级>1的优先级。
Scrapy也能通过一些环境变量进行设置:
- SCRAPY_SETTINGS_MODULE
- SCRAPY_PROJECT
- SCRAPY_PYTHON_SHELL
2.2 项目结构
所有的Scrapy项目一个默认的基本结构如下:
.
|____myproject
| |____items.py
| |____middlewares.py
| |____pipelines.py
| |____settings.py
| |____spiders
| | |____spider1.py
| | |____spider2.py
|____scrapy.cfg
scrapy.cfg所在的目录就是项目的根目录。该文件包含着定义项目设置的python模块的名字,如
6 [settings]
7 default = myproject.settings
3. scrapy genspider
- Syntax: scrapy genspider [-t template] <name> <domain>
- Requires project: no
在当前目录或当前项目的spiders目录下创建新的spider。<name>参数是设置spider的名字,<domain>用来生成spider的属性:allowed_domains和start_urls。
(scrapyEnv) MacBook-Pro:scrapy $ scrapy genspider -l
Available templates:
basic
crawl
csvfeed
xmlfeed
(scrapyEnv) MacBook-Pro:scrapy $ scrapy genspider example example.com
Created spider 'example' using template 'basic'
(scrapyEnv) MacBook-Pro:scrapy $ scrapy genspider -t crawl scrapyorg scrapy.org
Created spider 'scrapyorg' using template 'crawl'
(scrapyEnv) MacBook-Pro:scrapy $
这个命令提供了一个创建spider的简便方法,当然我们也还是可以自己创建spider的源文件。
4. scrapy crawl
- Syntax: scrapy crawl <spider>
- Requires project: yes
使用爬虫spider开始爬取。
(scrapyEnv) MacBook-Pro:project $ scrapy crawl myspider
5. scrapy check
- Syntax: scrapy check [-l] <spider>
- Requires project: yes
运行检查。
(scrapyEnv) MacBook-Pro:project $ scrapy check -l
(scrapyEnv) MacBook-Pro:project $ scrapy check
----------------------------------------------------------------------
Ran 0 contracts in 0.000s
OK
(scrapyEnv) MacBook-Pro:project $
6. scrapy list
- Syntax: scrapy list
- Requires project: yes
列出当前项目中所有可用的spiders。
(scrapyEnv) MacBook-Pro:project $ scrapy list
toscrape-css
toscrape-xpath
(scrapyEnv) MacBook-Pro:project $
7. edit
- Syntax: scrapy edit <spider>
- Requires project: yes
(scrapyEnv) MacBook-Pro:project $ scrapy edit toscrape-css
(scrapyEnv) MacBook-Pro:project $
8. fetch
- Syntax: scrapy fetch <url>
- Requires project: no
使用Scrapy的下载器下载给定的url并将内容写至标准输出设备。
值得注意的是它是按照spider如何下载网页的方式来获取页面的,如果spider有一个USER_AGENT属性则fetch也会使用spider的USER_AGENT作为自己的user_agent。如果是在Scrapy项目外使用fetch,没有应用特别的爬虫设置则使用默认的Scrapy下载设置。
此命令支持3个选项:
- --spider=SPIDER: 忽略自动检测的spider,强制使用指定的spider
- --headers: 输出response的HTTP headers而不是response的body内容
- --no-redirect: 不会随着HTTP 3xx重定向(默认是随着HTTP的重定向)
(scrapyEnv) MacBook-Pro:project $ scrapy fetch --nolog http://www.example.com/some/page.html
[ ... html content here ...]
(scrapyEnv) MacBook-Pro:project $ scrapy fetch --nolog --headers http://www.example.com/
> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> Accept-Language: en
> User-Agent: Scrapy/1.4.0 (+http://scrapy.org)
> Accept-Encoding: gzip,deflate
>
< Cache-Control: max-age=604800
< Content-Type: text/html
< Date: Wed, 25 Oct 2017 13:55:57 GMT
< Etag: "359670651+gzip"
< Expires: Wed, 01 Nov 2017 13:55:57 GMT
< Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
< Server: ECS (oxr/839F)
< Vary: Accept-Encoding
< X-Cache: HIT
(scrapyEnv) MacBook-Pro:project $
9. view
- Syntax: scrapy view <url>
- Requires project: no
在浏览器中打开指定的URL。有时spider看的页面会与普通用户看到的不一致,因此这个命令可以用来检查spider看到的是否与我们设想的一致。
支持的选项:
- --spider=SPIDER: 强制使用指定的spider
- --no-redirect: 不重定向(默认的是重定向)
(scrapyEnv) MacBook-Pro:project $ scrapy view http://www.163.com
10. shell
- Syntax: scrapy shell [url]
- Requires project: no
为指定的URL启动scrapy shell或不指定URL仅仅启动shell。支持UNIX风格的本地文件路径,也支持相对路径./或../,同时绝对的文件路径也是支持的。
支持的选项:
- --spider=SPIDER: 强制使用指定的spider
- -c code: 在shell中求代码的值,打印结果并退出
- --no-redirect: 不重定向(默认的是重定向);这仅仅只适用于命令行中当做参数传入的URL,如果进入scrapy shell,再使用fetch(url)时,默认会重定向。
(scrapyEnv) MacBook-Pro:project $ scrapy shell http://www.example.com/some/page.html
[ ... scrapy shell starts ...]
(scrapyEnv) MacBook-Pro:project$ scrapy shell --nolog http://www.example.com/ -c '(response.status, response.url)'
(200, 'http://www.example.com/')
(scrapyEnv) MacBook-Pro:project $ scrapy shell --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'
(200, 'http://example.com/')
(scrapyEnv) MacBook-Pro:project $ 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')
(scrapyEnv) MacBook-Pro:project $
11. parse
- Syntax: scrapy parse <url> [options]
- Requires project: yes
获取给定URL的页面并使用处理这个URL的spider解析,用--callback指定的方法,如果没指定则用默认的parse方法解析。
支持的选项
- --spider=SPIDER: 强制使用指定的spider
- --a NAME=VALUE:设置spider参数(可能重复的)
- --callback 或 -c:spider的回调方法,用来解析response的
- --pipelines:通过pipelines处理items
- --rules 或 -r:用crqslspider的规则去发现回调方法来解析response
- --noitems:不显示爬取的items
- --nolinks:不显示获取的链接
- --nocolour:避免使用pygments给输出着色
- --depth 或 -d:request请求递归的深度(默认为1)
- --verbose 或 -v:显示debug信息
12. settings
- Syntax: scrapy settings [options]
- Requires project: no
获取Scrapy设置的某个值。
如果在项目下使用,显示的是项目的配置,否则显示的是默认的scrapy设置。
(scrapyEnv) MacBook-Pro:project $ scrapy settings --get BOT_NAME
quotesbot
(scrapyEnv) MacBook-Pro:project $ scrapy settings --get DOWNLOAD_DELAY
0
(scrapyEnv) MacBook-Pro:project $
13. runspider
- Syntax: scrapy runspider <spider_file.py>
- Requires project: no
运行自包含在一个py文件中的爬虫,不需要创建项目。
$ scrapy runspider myspider.py
14. version
- Syntax: scrapy version [-v]
- Requires project: no
打印Scrapy的版本。如果和-v一起使用,将还会打印python,twisted和系统的信息。
15. bench
- Syntax: scrapy bench
- Requires project: no
运行一个基本测试。