Scrapy 命令行工具
1.Scrapy是通过 scrapy命令行工具控制的,Scrapy 工具提供了多个命令,用于多种用途,每个命令都接受一组不同的参数和选项。
2.配置设置
scrapy.cfg 文件位置:
1)系统级的位置:我这里是在D:\Users\AndyH\AppData\Local\Programs\Python\Python310\Lib\site-packages\scrapy\templates\project\scrapy.cfg 中。是用于全局的。
2)每个项目的根目录:如 F:\python_work\scrapy_Sample\tutorial\scrapy.cfg
项目级的优先级最高
3.scrapy项目的默认结构
虽然可以修改目录,但所有scrapy项目默认具有相同的文件结构,类似于:
所有爬取业务放在spiders文件夹下。scrapy.cfg称为项目根目录。该文件包含定义项目设置的 python 模块的名称。如:
4.使用scrapy工具
可以先运行不带参数的scrapy工具,它将打印一些使用帮助和可用命令:
scrapy命令: 有项目内部运行的命令(仅限项目的命令),有项目外部运行的命令(全局命令),下面详细介绍。
通过scrapy <command> -h 可以查看某个命令的更多信息
通过scrapy -h 可以查看可用的所有命令
1) startproject 全局命令
使用scrapy工具做的第一件事就是创建项目,这将在project_dir目录下创建一个scrapy项目
scrapy startproject myproject [project_dir]
2)genspider 全局命令
从字面解释是:生成一个新的爬虫预定义模板。在tutorial爬虫项目目录下,vs code终端运行下面命令,生成一个baidu.py的爬取文件。
PS F:\python_work\scrapy_Sample\tutorial> scrapy genspider baidu baidu.com Created spider 'baidu' using template 'basic' in module: tutorial.spiders.baidu
baidu.py自动生成在spiders文件夹下,并生成代码,如下所示:
下面是生成模板的选项,上面默认生成的是basic模板。
PS F:\python_work\scrapy_Sample\tutorial> scrapy genspider -l
Available templates:
basic
crawl
csvfeed
xmlfeed
3)crawl 内部命令
代表运行一个爬虫, quotes是项目爬取标识,项目中每一个爬取文件的name是唯一的。如quotes_spider.py的爬取标识为name=”quotes“
PS F:\python_work\scrapy_Sample\tutorial> scrapy crawl quotes
4)check 内部命令
检查一个爬虫
PS F:\python_work\scrapy_Sample\tutorial> scrapy check quotes
5)list 内部命令
列出当前项目可用的爬虫
PS F:\python_work\scrapy_Sample\tutorial> scrapy list
baidu
quotes
6)fetch(外部命令)
使用scrapy下载器下载给定的url,并将内容写入标准输出。
爬取内容输出命令如下:
PS F:\python_work\scrapy_Sample\tutorial> scrapy fetch --nolog http://www.example.com/some/page.html <!doctype html> <html> <head> <title>Example Domain</title> <meta charset="utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> body { background-color: #f0f0f2; margin: 0; padding: 0; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; } div { width: 600px; margin: 5em auto; padding: 2em; background-color: #fdfdff; border-radius: 0.5em; box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02); } a:link, a:visited { color: #38488f; text-decoration: none; } @media (max-width: 700px) { div { margin: 0 auto; width: auto; } } </style> </head> <body> ...
下面命令是打印响应的http 头,则不是响应的正文
PS F:\python_work\scrapy_Sample\tutorial> 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/2.6.1 (+https://scrapy.org) > Accept-Encoding: gzip, deflate > < Content-Length: 648 < Age: 536398 < Cache-Control: max-age=604800 < Content-Type: text/html; charset=UTF-8 < Date: Fri, 17 Jun 2022 11:51:11 GMT < Etag: "3147526947+gzip" < Expires: Fri, 24 Jun 2022 11:51:11 GMT < Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT < Server: ECS (sab/57A7) < Vary: Accept-Encoding < X-Cache: HIT
下面使用指定的爬虫名( --spider=quotes),下载给定的url,并将内容写入标准输出
PS F:\python_work\scrapy_Sample\tutorial> scrapy fetch --spider=quotes http://www.example.com/some/page.html
7)view 外部命令
输入下面的命令,会打开一个浏览器并显示访问的页面
PS F:\python_work\scrapy_Sample\tutorial> scrapy view http://www.example.com/some/page.html
下面使用指定的爬虫名( --spider=quotes),会打开一个浏览器并显示访问的页面
PS F:\python_work\scrapy_Sample\tutorial> scrapy view --spider=quotes http://www.example.com/some/page.html
8) shell 外面命令
PS F:\python_work\scrapy_Sample\tutorial> scrapy shell http://www.example.com/some/page.html
通过shell命令请求Uri后,可以继续 如 "提取数据"
In [1]: response.css('title') Out[1]: [<Selector xpath='descendant-or-self::title' data='<title>Example Domain</title>'>] In [2]: exit()
如果uri 中含有&字符,需要用双引号,如下所示:
PS F:\python_work\scrapy_Sample\tutorial> scrapy shell "https://www.futureelectronics.cn/c/audio/products?q=%3Arelevance&text=&pageSize=25&page=1"
加-c参数评估
PS F:\python_work\scrapy_Sample\tutorial> scrapy shell --nolog http://www.example.com/ -c '(response.status, response.url)' (200, 'http://www.example.com/')
9)parse 内部命令
获取给定的 URL 并使用处理它的蜘蛛解析它,使用与--callback
选项一起传递的方法,或者parse
如果没有给出。
下面是指定项目,调用指定的callback函数来解析(-c parse)
PS F:\python_work\scrapy_Sample\tutorial> scrapy parse --spider=quotes http://www.example.com/ -c parse
10)runspider 外面命令
在 Python 文件中运行自包含的爬虫,而无需创建项目。
如下所示,到spiders目录 下,直接用命令执行py文件
PS F:\python_work\scrapy_Sample\tutorial\tutorial\spiders> scrapy runspider baidu.py
11)version 外部命令
打印 Scrapy 版本。如果与它一起使用,-v
它还会打印 Python、Twisted 和平台信息,这对于错误报告很有用。
PS F:\python_work\scrapy_Sample\tutorial\tutorial\spiders> scrapy version -v Scrapy : 2.6.1 lxml : 4.9.0.0 libxml2 : 2.9.12 cssselect : 1.1.0 parsel : 1.6.0 w3lib : 1.22.0 Twisted : 22.4.0 Python : 3.10.5 (tags/v3.10.5:f377153, Jun 6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] pyOpenSSL : 22.0.0 (OpenSSL 3.0.3 3 May 2022) cryptography : 37.0.2 Platform : Windows-10-10.0.18362-SP0
参考文档:https://docs.scrapy.org/en/latest/topics/commands.html