Scrapy配置设置(全网最全):
背景:
之前在做爬虫项目的时候,老报错或有问题,我看了网上很多文章,但是都不是很全面,在这里写一篇博客给大家讲讲scrapy文件中的setting.py文件,我们如何使用。
当我们创建完一个工程只有下面的内容是打开注释的:
BOT_NAME = 'scrapy_baidu_091' # 爬虫的名称,用于在多个爬虫项目中进行区分。
SPIDER_MODULES = ['scrapy_baidu_091.spiders']
NEWSPIDER_MODULE = 'scrapy_baidu_091.spiders' # 指定爬虫模块的位置
相关配置:
君子协议:
- 设置是否遵守网站的robots.txt协议。在这个配置中,它被设置为False,表示不遵守协议。
- 我们在爬虫的时候一般设置为False,不然拿不到我们需要的数据。
ROBOTSTXT_OBEY = False
UA伪装:
USER_AGENT
:用于模拟浏览器发送请求时的用户代理(User-Agent)字符串。可以设置为常见浏览器的 User-Agent,就是浏览器的唯一标识,所以我们应该模拟浏览器发送请求
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
下载延迟:
下载延迟,即发送两个连续请求之间的等待时间,用于控制爬取速度。可以设置为一个浮点数,单位为秒。设置这个的原因是减少对浏览器的冲击,如果不设置,容易被检测出来,一般来说设置3秒即可。
DOWNLOAD_DELAY:3
是否启用cookie:
COOKIES_ENABLED:一个布尔值,用于指定是否启用 cookies。默认为 True,表示启用,我们都知道http是无痕迹的,服务器端识别客户端cookie的存在,比如一些需要登录的页面,我们需要告知我们是谁,这是需要用到cookie。当设置为False时,Scrapy将不会在请求中携带或处理Cookie信息。这对于需要匿名访问或不需要维护会话状态的爬取任务可能是有用的。
COOKIES_ENABLED:True
默认请求头:
- 可以设置默认的请求头。你可以根据需要修改这些请求头,包括Accept、Accept-Language等字段,以便在发送请求时指定特定的头部信息。
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',
}
DEFAULT_REQUEST_HEADERS = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36','Cookie': 'xxxxx'
}
导出字段:
比如我们想要制定导出字段顺序,可以使用下面的参数。
json格式,默认为Unicode编码:
- scrapy crawl itcast -o teachers.json
json lines格式,默认为Unicode编码:
- scrapy crawl itcast -o teachers.json
csv 逗号表达式,可用Excel打开:
- scrapy crawl itcast -o teachers.csv
xml格式
- scrapy crawl itcast -o teachers.xml
# 设置csv存储字段的顺序
FEED_EXPORT_FIELDS = ['title','url', 'desc','time']
导出字段详细配置编码:
# 设置导出数据的格式为CSV
FEED_FORMAT = 'csv'
# 设置导出数据的存储路径为文件系统中的相对路径
FEED_URI = 'file:./output/data.csv'
# 设置导出数据的编码格式为UTF-8
FEED_EXPORT_ENCODING = 'utf-8'
# 设置导出数据时的缩进级别为2,适用于可读性更好的JSON或XML导出
FEED_EXPORT_INDENT = 2
# 设置导出字段的顺序
FEED_EXPORT_FIELDS = ['field1', 'field2', 'field3']
# 设置是否存储空结果
FEED_STORE_EMPTY = True
重定向和refer:
REDIRECT_ENABLE
表示Scrapy的重定向功能,当设置为False时,Scrapy将不会自动处理服务器返回的重定向响应,而是将重定向的响应直接返回给回调函数。这对于需要手动处理重定向或禁止重定向的爬取任务可能是有用的。
REFERER_ENABLED = True
表示启用了Scrapy的Referer(引用页)处理功能。当设置为True时,Scrapy会自动在请求中添加Referer头部,指示该请求是从哪个页面链接过来的。这对于模拟真实的浏览行为和遵守网站的引用约定可能是有用的。
REDIRECT_ENABLED = False
REFERER_ENABLED = True
进程并发:
同时发送的请求数量。可以设置为一个整数,表示同时发送的最大请求数,默认值是16。
CONCURRENT_REQUESTS = 32
CONCURRENT_REQUESTS_PER_DOMAIN:每个域名同时发送的请求数量。可以设置为一个整数。
CONCURRENT_REQUESTS_PER_IP:每个 IP 地址同时发送的请求数量。可以设置为一个整数。
CONCURRENT_REQUESTS_PER_DOMAIN = 16
CONCURRENT_REQUESTS_PER_IP = 16
下载超时:
DOWNLOAD_TIMEOUT
:下载超时时间,即等待服务器响应的最大时间。可以设置为一个整数,单位为秒。
DOWNLOAD_TIMEOUT =10
管道:
ITEM_PIPELINES
:数据处理管道的设置。可以通过添加自定义的管道类来对爬取到的数据进行处理和存储,一般做数据处理和持久化存储。
ITEM_PIPELINES = {'scrapy_baidu_091.pipelines.ScrapyBaidu091Pipeline': 300,
}
中间件:
- 中间件分两种一个是下载中间件,另一个是爬虫中间件,比如我们需要设置代理ip,就需要放在下载中间件里面,或者想结合selenium做一些拦截响应等等需要开启下载中间件,爬虫中间件一般修改。
SPIDER_MIDDLEWARES = {'scrapy_baidu_091.middlewares.ScrapyBaidu091SpiderMiddleware': 543,
}DOWNLOADER_MIDDLEWARES = {'scrapy_baidu_091.middlewares.ScrapyBaidu091DownloaderMiddleware': 543,
}
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': None
表示禁用了Scrapy自带的Cookie中间件。Cookie中间件用于处理请求中的Cookie信息,以便在爬取过程中保持会话状态。'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': None
表示禁用了Scrapy自带的重定向中间件。重定向中间件用于处理服务器返回的重定向响应,将请求自动重定向到新的URL地址。'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 101
表示启用了Scrapy自带的HTTP代理中间件。该中间件用于设置和切换HTTP代理,以实现匿名访问或绕过IP限制等。
DOWNLOADER_MIDDLEWARES = {'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': None,'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': None,# 'douban2.middlewares.IPProxyMiddleware': 100,'douban2.middlewares.ProxyDownloaderMiddleware': 100,'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 101,
}
请求重试:
RETRY_ENABLED = True
表示启用了Scrapy的请求重试功能。当请求失败时,Scrapy将自动重试该请求。RETRY_TIMES = 3
表示设置了最大重试次数为3次。即当请求失败时,Scrapy将尝试重新发送请求最多3次。RETRY_HTTP_CODES = [500, 502, 503, 504]
表示定义了需要进行重试的HTTP状态码。在这个示例中,当请求返回的HTTP状态码是500、502、503或504时,Scrapy会认为请求失败,并进行重试
# 配置请求重试策略
RETRY_ENABLED = True
RETRY_TIMES = 3
RETRY_HTTP_CODES = [500, 502, 503, 504]
日志等级:
- 日志输出级别,用于控制日志的详细程度。可以设置为
'CRITICAL'
、'ERROR'
、'WARNING'
、'INFO'
或'DEBUG'
,用的最多的是error(只有报错才输出日志)和waring(只有警告才输出日志)。
LOG_LEVEL='ERROR'
扩展:
- EXTENSIONS:启用或禁用扩展,可以在这里配置相关扩展。
EXTENSIONS = {'scrapy.extensions.telnet.TelnetConsole': None,
}
自动限速扩展:
AUTOTHROTTLE_ENABLED
:启用或禁用自动限速扩展。自动限速可以根据服务器的负载自动调整爬取速度
AUTOTHROTTLE_ENABLED = True
缓存:
HTTPCACHE_ENABLED
:启用或禁用HTTP缓存。启用后,Scrapy可以缓存已下载的响应,下次遇到相同的请求时可以直接使用缓存的响应。
HTTPCACHE_ENABLED = True