Scrapy

来源:互联网 发布:网络机顶盒必装软件 编辑:程序博客网 时间:2024/06/05 08:00

Scrapy是由scrapy命令行工具来控制的,它的命令行工具为多种用途提供了一些不同的命令,每一个命令都有不同的参数和选项。

一些Scrapy命令必须在Scrapy项目目录下执行,另一些可以在任何目录下执行。而那些可以在任何目录下执行的命令,如果在Scrapy项目目录下执行可能会有些不同。

Scrapy命令执行环境Global commandsProject-only commandsstartprojectcrawlgenspiderchecksettingslistrunspidereditshellparsefetchbenchview version 

1. scrapy 

首先运行Scrapy命令行工具但没有任何命令,它会输出一些用法和可以使用的命令到屏幕上:

(scrapyEnv) MacBook-Pro:~ $ scrapyScrapy 1.4.0 - no active projectUsage:  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 directoryUse "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 -hUsage=====  scrapy startproject <project_name> [project_dir]Create new projectOptions=======--help, -h              show this help message and exitGlobal 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 -lAvailable templates:  basic  crawl  csvfeed  xmlfeed(scrapyEnv) MacBook-Pro:scrapy $ scrapy genspider example example.comCreated spider 'example' using template 'basic'(scrapyEnv) MacBook-Pro:scrapy $ scrapy genspider -t crawl scrapyorg scrapy.orgCreated 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.000sOK(scrapyEnv) MacBook-Pro:project $

6. scrapy list

  • Syntax: scrapy list
  • Requires project: yes

列出当前项目中所有可用的spiders。

(scrapyEnv) MacBook-Pro:project $ scrapy listtoscrape-csstoscrape-xpath(scrapyEnv) MacBook-Pro:project $

7. edit

  • Syntax: scrapy edit <spider>
  • Requires project: yes
使用EDITOR环境变量设置的EDITOR指定的编辑器打开指定的spider。

(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_NAMEquotesbot(scrapyEnv) MacBook-Pro:project $ scrapy settings --get DOWNLOAD_DELAY0(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

运行一个基本测试。






原创粉丝点击