之前在做爬虫项目的时候,老报错或有问题,我看了网上很多文章,但是都不是很全面,在这里写一篇博客给大家讲讲scrapy文件中的setting.py文件,我们如何使用。
当我们创建完一个工程只有下面的内容是打开注释的:
BOT_NAME = 'scrapy_baidu_091' # 爬虫的名称,用于在多个爬虫项目中进行区分。
SPIDER_MODULES = ['scrapy_baidu_091.spiders']
NEWSPIDER_MODULE = 'scrapy_baidu_091.spiders' # 指定爬虫模块的位置
ROBOTSTXT_OBEY = False
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
COOKIES_ENABLED:一个布尔值,用于指定是否启用 cookies。默认为 True,表示启用,我们都知道http是无痕迹的,服务器端识别客户端cookie的存在,比如一些需要登录的页面,我们需要告知我们是谁,这是需要用到cookie。当设置为False时,Scrapy将不会在请求中携带或处理Cookie信息。这对于需要匿名访问或不需要维护会话状态的爬取任务可能是有用的。
COOKIES_ENABLED:True
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编码:
json lines格式,默认为Unicode编码:
csv 逗号表达式,可用Excel打开:
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
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,
}
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 = {
'scrapy.extensions.telnet.TelnetConsole': None,
}
AUTOTHROTTLE_ENABLED
:启用或禁用自动限速扩展。自动限速可以根据服务器的负载自动调整爬取速度AUTOTHROTTLE_ENABLED = True
HTTPCACHE_ENABLED
:启用或禁用HTTP缓存。启用后,Scrapy可以缓存已下载的响应,下次遇到相同的请求时可以直接使用缓存的响应。HTTPCACHE_ENABLED = True