settings.py是项目的配置文件,用于设置项目的基础参数。该配置文件可根据项目的需求随时更改配置项。
Scrapy包含非常多的配置项,按照配置的作用可以将配置项进行分组,常用配置项的分组如下:分析配置组(用于统计和分析)、性能配置组(用于配置爬虫的性能)、文件下载配置组(用于图像、音视频、文档的下载)、爬取风格配置组(用于选择爬取方式)、项目配置组(用于配置项目相关信息)。
1、 分析配置组
分析配置组的主要作用是通过日志、统计等工具为爬虫提供性能和调试信息。
配置日志
日志就是记录爬虫在运行过程中的状态、行为、异常信息等内容,通过分析运行日志,可以实现对爬虫的运行状态的分析、调试及错误定位。
Scrapy框架默认是不输出日志的,要让爬虫程序输出日志,需要在settings.py配置文件中添加类似下面的配置项:
# 日志配置 LOG_LEVEL ='INFO' LOG_FILE ='./ matplotlib.log'
“./matplotlib.log”是在当前程序运行的目录下输出matplotlib.log日志文件。该配置项将会导致日志信息输出到文件而不是控制台。
配置统计
STATS_DUMP配置项允许爬虫文件结束后,将将统计信息收集器中的值转存到日志当中。Scrapy提供了方便的收集数据的机制。数据以key/value方式存储,值大多是计数值。
例如运行案例matplotlib爬虫后,会输出下面的统计信息:
{'downloader/request_bytes': 222606,
'downloader/request_count': 526,
'downloader/request_method_count/GET': 526,
'downloader/response_bytes': 40411268,
'downloader/response_count': 526,
'downloader/response_status_count/200': 521,
'downloader/response_status_count/301': 5,
'elapsed_time_seconds': 28.93832,
'file_count': 1032,
'file_status_count/uptodate': 1032,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2020, 11, 14, 1, 29, 26, 288542),
'item_dropped_count': 2,
'item_dropped_reasons_count/DropItem': 2,
'item_scraped_count': 516,
'log_count/INFO': 11,
'log_count/WARNING': 2,
'request_depth_max': 1,
'response_received_count': 521,
'robotstxt/request_count': 2,
'robotstxt/response_count': 2,
'robotstxt/response_status_count/200': 2,
'scheduler/dequeued': 521,
'scheduler/dequeued/memory': 521,
'scheduler/enqueued': 521,
'scheduler/enqueued/memory': 521,
'start_time': datetime.datetime(2020, 11, 14, 1, 28, 57, 350222)}在Scrapy生成的默认配置文件中,并没有STATS_DUMP配置项,但该配置项默认是开启的,若需要停止Scrapy将统计信息收集器中的值转存到日志当中,需要在settings.py配置文件中添加下面的配置项:
# 配置统计数据存储到日志文件
STATS_DUMP = False
2、 性能配置组
性能配置组可以配置爬虫的最大并发请求数、页面下载间隔时间、启用缓存等爬取方式,用于调整爬虫的工作性能。
配置最大并发请求数
CONCURRENT_REQUESTS配置项用于配置最大并发请求数,默认值是16,即允许可以同时发送16个URL请求。
Scrapy爬虫发送的请求是并发进行的,默认可以同时发送16个URL请求,并发请求的处理受到下载延迟、内存及CPU效率的限制,最大限制是下载延迟,其延迟时间约等于远程服务器响应的时间,加上网络传输、爬虫程序处理过程的延迟时间,当延迟时间过长时,就会造成请求阻塞。因此最大并发请求数设置是否合适,会对爬虫性能产生较大影响。
若需要修改最大并发请求数,需要在settings.py配置文件中添加下面的配置项:
# 配置最大并发请求数 CONCURRENT_REQUESTS = 20
配置页面下载间隔时间
DOWNLOAD_DELAY配置项用于配置从同一网站下载连续页面之前应等待的时间。例如:下载管理器队列需要从同一网站下载A、B、C三个页面,A页面已经下载完成,现在需要下载B页面,下载B页面之前需要等待一段时间,这段时间就是下载间隔时间。该选项可以用来限制爬取速度, 减轻爬虫对远程服务器的爬取压力。
该配置项支持小数,单位是秒。该设置还受随机下载延迟设置的影响。默认情况下,Scrapy不会在请求之间等待固定的时间,而是使用0.5*下载延迟和1.5*下载延迟之间的随机间隔。
若需要修改页面下载间隔时间,需要在settings.py配置文件中添加下面的配置项:
# 配置页面下载间隔时间 DOWNLOAD_DELAY = 0.26
启用缓存
配置项HTTPCACHE_ENABLED允许启用缓存,该配置项默认是关闭的。Scrapy的HttpCacheMiddleware组件(默认情况下没有启用)提供了对HTTP请求和响应的缓存。启用该组件,需要在配置文件中去掉HTTPCACHE_ENABLED配置项的注释:
HTTPCACHE_ENABLED = True
与该配置项相关的配置项有HTTPCACHE_EXPIRATION_SECS、HTTPCACHE_DIR、HTTPCACHE_IGNORE_HTTP_CODES和HTTPCACHE_STORAGE。
HTTPCACHE_EXPIRATION_SECS配置项用于配置请求的过期时间,若该配置项为0,则缓存的请求永远不会过期,该配置项默认为0。
HTTPCACHE_DIR用于配置存储HTTP缓存的目录。如果为空,将禁用HTTP缓存,如果设置了相对路径,则相对于项目数据目录存储。该配置项默认目录是相对路径httpcache。
HTTPCACHE_IGNORE_HTTP_CODES用于配置不需要缓存的请求,默认为空。
HTTPCACHE_STORAGE用于配置实现缓存存储的类,默认类为:
scrapy.extensions.httpcache.FilesystemCacheStorage
3、 文件下载配置组
文件下载配置组主要包括IMAGES_STORE、IMAGES_THUMBS、IMAGES_MIN_WIDTH、IMAGES_MIN_HEIGHT、FILES_STORE、FILES_EXPIRES等配置项。
这些配置项在《4.1节 下载网页图片》和《4.2节 爬取matplotlib》都有讲述,可以参考这两节的内容来理解上述配置项。
4、 爬取风格配置组
Scrapy允许调整优先爬取页面的方式,爬虫在爬取页面时会面临爬取路径的选择,路径选择有深度优先和广度优先。
深度优先的爬虫会对网页的链接深度爬取。例如网页A的某一链接指向网页B,网页B的链接又指向C,网页C的链接又指向D。深度优先的爬虫会从A一直爬取到B再返回。
广度优先的爬虫会对网页的所有链接爬取完成后,再选取一个链接进入链接网页。例如网页A有10个链接,爬虫会先爬取网页A的这10个链接,然后再爬取链接网页,爬取链接网页时同样采用广度优先的算法。
配置项DEPTH_LIMIT用于配置爬取的最大深度,该配置项默认为0,对爬取深度没有限制。若需要调整爬取深度,需要在settings.py配置文件中添加下面的配置项:
# 配置网页爬取深度 DEPTH_LIMIT = 3
配置项DEPTH_PRIORITY用于调整爬取深度优先级,默认值为0,不进行深度优先级调整。若该配置项为正数,将降低深度优先级,,以执行广度优先爬取。
在爬取新闻网站时进行这些设置非常有用。例如:爬取百度新闻,最新的新闻会放置在网站的首页,并且每个新闻页都有到其他相关新闻的链接。爬虫正确的爬取方式应该是对首页的前几个新闻报道尽可能深地爬取,之后再继续爬取接下来的首页新闻。
广度优先的爬取顺序是首先爬取首页新闻,之后才会进一步深入,可以设置DEPTH_LIMIT一个合适的数值,例如设为3,可以让爬虫爬取新闻网站最近的新闻。
配置项ROBOTSTXT_OBEY用于配置是否遵循robots.txt文件声明,网站在其根目录下使用Web标准的robots.txt文件,声明它们允许的爬取策略,以及不希望被访问的网站结构。该配置项默认值为True,即遵循robots.txt文件声明。若不希望爬虫遵循robots.txt文件声明,可将该配置项设置为False。
5、 项目配置组
项目名称
配置项BOT_NAME用于配置项目名称,项目名称采用Scrapy创建项目时输入的项目名称,该名称尽量不要修改。
爬虫模块路径
配置项SPIDER_MODULES用于配置爬虫模块的包路径,Scrapy会从该路径查询并启动爬虫。