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