python-scrapy框架(四)settings.py文件的用法详解实例

简介: python-scrapy框架(四)settings.py文件的用法详解实例

settings.py文件是Scrapy框架中用来配置爬取相关设置的文件。在Scrapy中,我们可以通过修改settings.py文件来自定义爬虫的行为,包括设置全局变量、配置下载延迟、配置ua池、设置代理以及其他爬虫相关的配置项。下面是对settings.py文件用法的详细解释和一个实例:

1.设置全局变量
在settings.py文件中,我们可以定义一些全局变量,这些变量在整个爬虫过程中都可以使用。例如,我们可以定义一个USER_AGENT变量,用来设置请求的User-Agent头信息:
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
2.配置下载延迟
在settings.py文件中,可以通过设置DOWNLOAD_DELAY参数来配置下载延迟,以控制爬取速度。DOWNLOAD_DELAY的单位是秒,可以设置为1或更大的值。例如:
DOWNLOAD_DELAY = 1
3.配置UA池
为了防止网站对的识别,我们可以设置一个User-Agent池,让每个请求随机选择一个User-Agent进行发送。可以在settings.py文件中设置USER_AGENT_POOL,如下所示:
USER_AGENT_POOL = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebK...
]

然后,在Spider中随机选择一个User-Agent进行请求发送:

from scrapy import Spider
from scrapy.utils.project import get_project_settings
from scrapy.utils.httpobj import urlparse_cached
 
class MySpider(Spider):
    name = 'my_spider'
    
    def __init__(self, name=None, **kwargs):
        self.settings = get_project_settings()
    
    def start_requests(self):
        # ...
        yield scrapy.Request(url, headers={'User-Agent': self.settings['USER_AGENT_POOL'][random.randint(0, len(self.settings['USER_AGENT_POOL'])-1)]})
4.设置代理
如果需要通过代理来进行爬取,可以在settings.py文件中设置PROXIES参数。例如:
PROXIES = [
    'http://proxy1.example.com:8888',
    'http://proxy2.example.com:8888',
    'http://proxy3.example.com:8888',
]

然后,在Spider中随机选择一个代理进行请求发送:

from scrapy import Spider
from scrapy.utils.project import get_project_settings
from scrapy.utils.httpobj import urlparse_cached
 
class MySpider(Spider):
    name = 'my_spider'
    
    def __init__(self, name=None, **kwargs):
        self.settings = get_project_settings()
    
    def start_requests(self):
        # ...
        yield scrapy.Request(url, meta={'proxy': self.settings['PROXIES'][random.randint(0, len(self.settings['PROXIES'])-1)]})
5.其他相关配置项
在settings.py文件中,还可以设置其他的相关配置项,如日志级别、保存路径、爬取深度等。以下是一些常见的配置项:
# 日志级别
LOG_LEVEL = 'INFO'
 
# 爬虫名称
BOT_NAME = 'my_bot'
 
# 爬取深度限制
DEPTH_LIMIT = 3
 
# 是否遵循robots.txt
ROBOTSTXT_OBEY = True
 
# 是否启用缓存
HTTPCACHE_ENABLED = True
 
# 缓存过期时间
HTTPCACHE_EXPIRATION_SECS = 0
 
# 缓存存储路径
HTTPCACHE_DIR = 'httpcache'
 
# 缓存存储方式
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

这些只是settings.py文件中一些常见的配置项,你可以根据需要添加或修改更多的配置项。以下是更多可能用到的配置项:

6.开启并配置自定义的扩展
Scrapy框架允许开发者编写自定义的扩展来增强爬虫的功能。在settings.py文件中,可以通过EXTENSIONS参数来启用和配置这些扩展。例如,启用并配置自定义的扩展MyExtension:
EXTENSIONS = {
    'myextension.MyExtension': 500,
}
7.配置重试次数
在爬虫过程中,可能会发生请求失败的情况,可以通过配置RETRY_TIMES和RETRY_HTTP_CODES参数来控制自动重试的次数和HTTP响应状态码。例如,设置最大重试次数为3次,仅在遇到500和502的情况下进行重试:
RETRY_TIMES = 3
RETRY_HTTP_CODES = [500, 502]
8.配置并发请求数量
通过并发发送请求可以提高爬取效率,可以通过配置CONCURRENT_REQUESTS参数来设置同时发送的请求数量。例如,设置同时发送10个请求:
CONCURRENT_REQUESTS = 10
9.配置下载器中间件和爬虫中间件
Scrapy框架提供了下载器中间件和爬虫中间件,用于在请求和响应的处理过程中进行自定义的操作。可以通过配置DOWNLOADER_MIDDLEWARES和SPIDER_MIDDLEWARES参数来启用和配置这些中间件。例如,启用并配置自定义的下载器中间件MyDownloaderMiddleware和中间件MySpiderMiddleware:
DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.MyDownloaderMiddleware': 543,
}
SPIDER_MIDDLEWARES = {
    'myproject.middlewares.MySpiderMiddleware': 543,
}
10.配置请求头信息
可以通过设置DEFAULT_REQUEST_HEADERS参数来配置默认的请求头信息。例如,设置Referer和Cookie:
DEFAULT_REQUEST_HEADERS = {
    'Referer': 'http://www.example.com',
    'Cookie': 'session_id=xxxxx',
}
11.配置是否启用重定向
可以通过配置REDIRECT_ENABLED参数来控制是否启用请求的重定向。例如,禁用重定向:
REDIRECT_ENABLED = False
12.配置去重过滤器
Scrapy框架内置了去重过滤器,用于过滤已经爬取过的URL。可以通过配置DUPEFILTER_CLASS参数来选择使用的去重过滤器。例如,使用基于Redis的去重过滤器:
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'

这些只是settings.py文件中一些可能用到的配置项。根据实际需求,你可以根据Scrapy框架提供的各种功能来对settings.py文件进行自定义的配置,以满足你的需求。


相关文章
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
105 6
|
2天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
17 5
|
5天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
23 7
|
2天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
16 2
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
95 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
18天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
29天前
|
缓存 API 数据库
Python哪个框架合适开发速卖通商品详情api?
在跨境电商平台速卖通的商品详情数据获取与整合中,Python 语言及其多种框架(如 Flask、Django、Tornado 和 FastAPI)提供了高效解决方案。Flask 简洁灵活,适合快速开发;Django 功能全面,适用于大型项目;Tornado 性能卓越,擅长处理高并发;FastAPI 结合类型提示和异步编程,开发体验优秀。选择合适的框架需综合考虑项目规模、性能要求和团队技术栈。
26 2
|
1月前
|
安全 API 数据库
Python哪个框架合适开发淘宝商品详情api?
在数字化商业时代,开发淘宝商品详情API成为企业拓展业务的重要手段。Python凭借其强大的框架支持,如Flask、Django、Tornado和FastAPI,为API开发提供了多样化的选择。本文探讨了这些框架的特点、优势及应用场景,帮助开发者根据项目需求选择最合适的工具,确保API的高效、稳定与可扩展性。
30 0
|
1月前
|
安全 API 网络架构
Python中哪个框架最适合做API?
本文介绍了Python生态系统中几个流行的API框架,包括Flask、FastAPI、Django Rest Framework(DRF)、Falcon和Tornado。每个框架都有其独特的优势和适用场景。Flask轻量灵活,适合小型项目;FastAPI高性能且自动生成文档,适合需要高吞吐量的API;DRF功能强大,适合复杂应用;Falcon高性能低延迟,适合快速API开发;Tornado异步非阻塞,适合高并发场景。文章通过示例代码和优缺点分析,帮助开发者根据项目需求选择合适的框架。
120 0
|
1月前
|
测试技术 API 数据安全/隐私保护
Python连接到Jira实例、登录、查询、修改和创建bug
通过使用Python和Jira的REST API,可以方便地连接到Jira实例并进行各种操作,包括查询、修改和创建Bug。`jira`库提供了简洁的接口,使得这些操作变得简单易行。无论是自动化测试还是开发工作流的集成,这些方法都可以极大地提高效率和准确性。希望通过本文的介绍,您能够更好地理解和应用这些技术。
132 0
下一篇
DataWorks