第三章 项目配置和命令行使用与解析
经过上一章的学习,我们创建了项目,并且尝试创建并运行了一个爬虫。这一章我们将对整个项目进行配置,看看配置项中都有那些东西需要学习和注意的。
配置文件位置
scrapy
的配置文件有两个,分别位于项目同目录的scrapy.cfg
和位于项目根目录的settings.py
配置文件解读
scrapy.cfg
文件作用
该文件主要用于配置部署参数,即项目在完成开发后部署至生产环境时的配置信息,我们将在后面专门讲部署的时候,再进行非常详细的展开讲解,本处我们只是提出来,让大家有个印象。
settings.py
文件作用
Scrapy
的settings.py
允许您自定义所有 Scrapy
组件的行为,包括核心、扩展、管道和spiders
本身。
配置项详解
打开配置文件我们会看到很多需要配置的属性,我们将对需要更改的一一进行详解。
BOT_NAME = 'tutorial'
设置项目名称
ROBOTSTXT_OBEY = True
是否遵守robots.txt
协议,如果启用,Scrapy
在爬取的过程中将遵守 robots.txt
政策。有关更多信息,请参阅 RobotsTxtMiddleware。
robots
协议指的是,网站开发者放在网站根目录下的一个文件,名叫robots.txt
,该文件中定义了一些爬虫必须遵守的规则,比如那些文件、那些路径不能爬取,那些可以爬取等等。
这里我们将该值设置成False
,表明我们不遵守协议。至于为什么不遵守,各位可以在评论区讨论。
DOWNLOAD_DELAY = 3
访问间隔时长,大多数的网站为了防止爬虫或者为了减轻服务器压力都会设置某个ip或者其他特征在一定时间内范围的访问次数,比如你的ip只能在1秒访问3次,如果你一秒内访问了4次,那么第4次就是不能访问成功的。
这是现在各大网站普遍采用的一个简单策略,因此我们的爬虫在爬取的过程中就需要设置间隔时长,也就是别爬的太快,爬一爬休息一下,再接着爬,否则把人家网站搞崩了就没得爬了。
COOKIES_ENABLED = False
设置启动cookie,这个很好理解,根据爬取的网站,需要就开启。
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
设置爬虫请求访问时的头部信息User-Agent
,这个非常重要,并且要根据实际情况进行变化,如果要想爬取pc
页面就可以传递pc的User-Agent
,如果想要爬取移动端页面就需要调整User-Agent
。
获取User-Agent
那么这个User-Agent该从那里去获取呢?
在我们访问任何一个网站的时候,发出的请求都会携带这个信息,因此我们只需要再任意一个网站上右键--检查--Network--任意点击一次请求
,就可以看到。如下图所示
将看到的请求头中的user-agent后面的值,写入到上面的对象中即可,如果想要请求的是移动端网页,则只需要把请求方式换成移动端方式即可,如下图:
命令行使用与解读
创建项目
您通常使用 scrapy
工具做的第一件事是创建您的 Scrapy
项目:
scrapy startproject myproject [project_dir]
将在 project_dir
目录下创建一个 Scrapy
项目。如果未指定 project_dir
,则 project_dir
将与 myproject
相同,即当前文件夹。
接下来,您可以进入新的项目目录:
cd project_dir
创建一个新的爬虫
scrapy genspider [-t template] <name> <domain>
如果从项目内部调用,则在当前文件夹或当前项目的 spiders
文件夹中创建一个新 spiders
。 Name 参数设置为spiders
的名称,而 domain 用于生成 allowed_domains 和 start_urls scrapy
的属性。
scrapy genspider mydomain mydomain.com
将会创建一个名为mydomain的爬虫,监控的域名是最后一个参数所声明的域名
注:
某些
Scrapy
命令(如 crawl)必须从Scrapy
项目内部运行。有关哪些命令必须从项目内部运行,哪些不能运行的更多信息,请参阅下面的命令参考。
命令行帮助
scrapy <command> -h
关于某些命令的帮助
scrapy -h
scrapy
的帮助
命令的使用范围
scrapy
有两种命令,一种只能在 Scrapy
项目内部工作(特定于项目的命令)和那些在没有活动 Scrapy
项目的情况下也可以工作的命令(全局命令),尽管从项目内部运行时它们的行为可能略有不同(因为他们会使用项目覆盖的设置)。
全局命令
-
startproject
-
genspider
-
settings
-
runspider
-
shell
-
fetch
-
view
-
version
项目内部命令
-
crawl
-
check
-
list
-
edit
-
parse
-
bench
genspider
- 语法:
scrapy genspider [-t template] <name> <domain>
- 需要项目:否
获取scrapy
支持的模板,默认为basic
scrapy genspider -l
# return
Available templates:
basic
crawl
csvfeed
xmlfeed
crawl
- 语法:
scrapy crawl spider
- 需要项目:是
开始执行一个爬虫。例如:
scrapy crawl myspider
check
- 语法:
scrapy check [-l] <spider>
- 需要项目:是
运行检查,对爬虫进行检查
list
- 语法:
scrapy list
- 需要项目:是
列出当前项目中所有可用的scrapy
。输出是每行一个scrapy
。
$ scrapy list
spider1
spider2