Scrapy 简明教程
Scrapy - Settings
Designating the Settings
当你抓取网站时,你必须通知 Scrapy 你正在使用哪些设置。为此,应该使用环境变量 SCRAPY_SETTINGS_MODULE ,其值应为 Python 路径语法。
Populating the Settings
下表显示了一些可以填充设置的机制−
Sr.No |
Mechanism & Description |
1 |
Command line options 此处,传递的参数优先级最高,覆盖其他选项。 -s 用于覆盖一个或多个设置。scrapy crawl myspider -s LOG_FILE = scrapy.log |
2 |
Settings per-spider 通过使用属性 custom_settings,Spider 可以具有自己的设置,从而覆盖 project 设置。class DemoSpider(scrapy.Spider): name = 'demo' custom_settings = { 'SOME_SETTING': 'some value', } |
3 |
Project settings module 此处,您可以填充自定义设置,例如在 settings.py 文件中添加或修改设置。 |
4 |
Default settings per-command 每个 Scrapy 工具命令在 default_settings 属性中定义其自己的设置,以覆盖全局默认设置。 |
5 |
Default global settings 这些设置可在 scrapy.settings.default_settings 模块中找到。 |
Access Settings
它们可通过 self.settings 获得,并在初始化后设置在基础 Spider 中。
以下示例演示了这一点。
class DemoSpider(scrapy.Spider):
name = 'demo'
start_urls = ['http://example.com']
def parse(self, response):
print("Existing settings: %s" % self.settings.attributes.keys())
要在初始化 Spider 之前使用设置,您必须在 Spider 的 init () 方法中覆盖 from_crawler 方法。您可以通过传递给 from_crawler 方法的属性 scrapy.crawler.Crawler.settings 访问设置。
以下示例演示了这一点。
class MyExtension(object):
def __init__(self, log_is_enabled = False):
if log_is_enabled:
print("Enabled log")
@classmethod
def from_crawler(cls, crawler):
settings = crawler.settings
return cls(settings.getbool('LOG_ENABLED'))
Rationale for Setting Names
设置名称被添加为它们配置的组件的前缀。例如,对于 robots.txt 扩展,设置名称可以是 ROBOTSTXT_ENABLED、 ROBOTSTXT_OBEY、ROBOTSTXT_CACHEDIR 等。
Built-in Settings Reference
下表显示了 Scrapy 的内置设置−
Sr.No |
Setting & Description |
1 |
AWS_ACCESS_KEY_ID 用于访问 Amazon Web 服务。默认值:无 |
2 |
AWS_SECRET_ACCESS_KEY 用于访问 Amazon Web 服务。默认值:无 |
3 |
BOT_NAME 可以用于构造 User-Agent 的 bot 名称。默认值:'scrapybot' |
4 |
CONCURRENT_ITEMS Item Processor 中用于并行处理的现有项的最大数量。默认值:100 |
5 |
CONCURRENT_REQUESTS Scrapy 下载器执行的现有请求的最大数量。默认值:16 |
6 |
CONCURRENT_REQUESTS_PER_DOMAIN 同时对任何单个域执行的现有请求的最大数量。默认值:8 |
7 |
CONCURRENT_REQUESTS_PER_IP 同时对任何单个 IP 执行的现有请求的最大数量。默认值:0 |
8 |
DEFAULT_ITEM_CLASS 用于表示项的类。默认值:'scrapy.item.Item' |
9 |
DEFAULT_REQUEST_HEADERS 用于 Scrapy 的 HTTP 请求的默认标头。默认值 −{ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8', 'Accept-Language': 'en',} |
10 |
DEPTH_LIMIT 蜘蛛爬取任何站点的最大深度。默认值: 0 |
11 |
DEPTH_PRIORITY 用于根据深度调整请求优先级的整数。默认值: 0 |
12 |
DEPTH_STATS 表示是否收集深度统计信息。默认值: True |
13 |
DEPTH_STATS_VERBOSE 当启用此设置时,将为每个详细深度收集统计信息中的请求数量。默认值: False |
14 |
DNSCACHE_ENABLED 用于在内存缓存中启用 DNS。默认值: True |
15 |
DNSCACHE_SIZE 定义内存缓存中 DNS 的大小。默认值: 10000 |
16 |
DNS_TIMEOUT 用于设置处理查询的 DNS 超时。默认值: 60 |
17 |
DOWNLOADER 用于爬行过程的下载器。默认值: "scrapy.core.downloader.Downloader" |
18 |
DOWNLOADER_MIDDLEWARES 保存下载器中间件及其顺序的字典。默认值: {} |
19 |
DOWNLOADER_MIDDLEWARES_BASE 保存默认启用下载器中间件的字典。默认值 −{ "scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware": 100, } |
20 |
DOWNLOADER_STATS 此设置用于启用下载器统计信息。默认值: True |
21 |
DOWNLOAD_DELAY 定义下载器从站点下载页面之前的时间总数。默认值: 0 |
22 |
DOWNLOAD_HANDLERS 含下载处理程序的字典。默认值: {} |
23 |
DOWNLOAD_HANDLERS_BASE 是包含默认启用的下载处理程序的字典。默认值 −{ "file": "scrapy.core.downloader.handlers.file.FileDownloadHandler", } |
24 |
DOWNLOAD_TIMEOUT 是下载器在超时之前等待的总时间。默认值: 180 |
25 |
DOWNLOAD_MAXSIZE 是下载器要下载的响应的最大值。默认值: 1073741824 (1024MB) |
26 |
DOWNLOAD_WARNSIZE 定义下载器发出警告的响应大小。默认值: 33554432 (32MB) |
27 |
DUPEFILTER_CLASS 用于检测和筛选重复请求的类。默认值: "scrapy.dupefilters.RFPDupeFilter" |
28 |
DUPEFILTER_DEBUG 将所有重复过滤器记录在这项设置为 true 时。默认值: False |
29 |
EDITOR 它用于使用编辑命令编辑爬虫。默认值:取决于环境 |
30 |
EXTENSIONS 这是一个包含在项目中启用的扩展的字典。默认值:{} |
31 |
EXTENSIONS_BASE 这是一个包含内置扩展的字典。默认值:{ 'scrapy.extensions.corestats.CoreStats': 0, } |
32 |
FEED_TEMPDIR 这是一个目录,用于设置自定义文件夹,其中可以存储爬虫临时文件。 |
33 |
ITEM_PIPELINES 这是一个包含管道的字典。默认值:{} |
34 |
LOG_ENABLED 它定义是否启用日志记录。默认值:True |
35 |
LOG_ENCODING 它定义用于日志记录的编码类型。默认值:'utf-8' |
36 |
LOG_FILE 这是用于日志记录输出的文件的名称。默认值:None |
37 |
LOG_FORMAT 它是一个字符串,可用于设置日志消息格式。默认值:'%(asctime)s [%(name)s] %(levelname)s: %(message)s' |
38 |
LOG_DATEFORMAT 这是一个字符串,可用于设置日期/时间格式。默认值:'%Y-%m-%d %H:%M:%S' |
39 |
LOG_LEVEL 它定义最小日志级别。默认值:'DEBUG' |
40 |
LOG_STDOUT 如果此设置设为 true,则所有进程输出将显示在日志中。默认值:False |
41 |
MEMDEBUG_ENABLED 它定义是否启用内存调试。默认值:False |
42 |
MEMDEBUG_NOTIFY 它定义在启用内存调试时发送到特定地址的内存报告。默认值:[] |
43 |
MEMUSAGE_ENABLED 它定义当 Scrapy 进程超过内存限制时是否启用内存使用。默认值:False |
44 |
MEMUSAGE_LIMIT_MB 它定义允许的最大内存限制(以兆字节为单位)。默认值:0 |
45 |
MEMUSAGE_CHECK_INTERVAL_SECONDS 它用于通过设置间隔长度检查当前的内存使用情况。默认值:60.0 |
46 |
MEMUSAGE_NOTIFY_MAIL 它用于在内存达到限制时通过电子邮件列表进行通知。默认值:False |
47 |
MEMUSAGE_REPORT 它定义在关闭每个爬虫时是否发送内存使用情况报告。默认值:False |
48 |
MEMUSAGE_WARNING_MB 在发出警告之前,它定义了允许的总内存。默认值:0 |
49 |
NEWSPIDER_MODULE 它是一个使用 genspider 命令创建新蜘蛛的模块。默认值:'' |
50 |
RANDOMIZE_DOWNLOAD_DELAY 它定义了 Scrapy 在从网站下载请求时等待的随机时间量。默认值:True |
51 |
REACTOR_THREADPOOL_MAXSIZE 它定义了反应堆线程池的最大大小。默认值:10 |
52 |
REDIRECT_MAX_TIMES 它定义了请求可以被重定向的次数。默认值:20 |
53 |
REDIRECT_PRIORITY_ADJUST 设置此设置时,调整请求的重定向优先级。默认值:+2 |
54 |
RETRY_PRIORITY_ADJUST 设置此设置时,调整请求的重试优先级。默认值:-1 |
55 |
ROBOTSTXT_OBEY 当设置为 true 时,Scrapy 遵守 robots.txt 策略。默认值:False |
56 |
SCHEDULER 它定义了用于爬网目的的调度程序。默认值:'scrapy.core.scheduler.Scheduler' |
57 |
SPIDER_CONTRACTS 它是项目中的一个字典,其中包含要测试蜘蛛的蜘蛛合同。默认值:{} |
58 |
SPIDER_CONTRACTS_BASE 它是一个包含 Scrapy 合同的字典,默认情况下在 Scrapy 中启用。默认值 −{ 'scrapy.contracts.default.UrlContract' : 1, 'scrapy.contracts.default.ReturnsContract': 2,} |
59 |
SPIDER_LOADER_CLASS 它定义了一个实现 SpiderLoader API 以加载蜘蛛的类。默认值:'scrapy.spiderloader.SpiderLoader' |
60 |
SPIDER_MIDDLEWARES 它是一个包含蜘蛛中间件的字典。默认值:{} |
61 |
SPIDER_MIDDLEWARES_BASE 它是一个包含默认情况下在 Scrapy 中启用的蜘蛛中间件的字典。默认值 −{ 'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,} |
62 |
SPIDER_MODULES 它是一个包含 Scrapy 将查找的包含蜘蛛的模块的列表。默认值:[] |
63 |
STATS_CLASS 它是一个实现统计收集器 API 以收集统计信息的类。默认值:'scrapy.statscollectors.MemoryStatsCollector' |
64 |
STATS_DUMP 当此设置设置为 true 时,将统计信息转储到日志中。默认值:True |
65 |
STATSMAILER_RCPTS 在蜘蛛完成抓取后,Scrapy 使用此设置发送统计信息。默认值:[] |
66 |
TELNETCONSOLE_ENABLED 它定义了是否启用 telnet 控制台。默认值:True |
67 |
TELNETCONSOLE_PORT 它为 telnet 控制台定义了一个端口。默认值:[6023, 6073] |
68 |
TEMPLATES_DIR 它是一个包含模板的目录,这些模板可在创建新项目时使用。默认值:scrapy 模块内部的 templates 目录 |
69 |
URLLENGTH_LIMIT 它定义允许爬取 URL 的 URL 长度最大限制。默认值:2083 |
70 |
USER_AGENT 它定义在爬取网站时要使用的 user agent。默认值:"Scrapy/VERSION (+http://scrapy.org)" |
有关其他 Scrapy 设置,请访问此 link 。