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文件进行自定义的配置,以满足你的需求。


相关文章
|
11天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
1月前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
111 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
21天前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
51 20
|
27天前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
|
28天前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
|
1月前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
1月前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
41 0
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
2月前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
178 5
|
6月前
|
测试技术 索引 Python
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(一)
本文提供了Python接口自动化测试中的编程练习,包括计算器、猜数字、猜拳和九九乘法表等经典问题,涵盖了数据类型、运算、循环、条件控制等基础知识的综合应用。
67 1
|
3月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
190 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路

热门文章

最新文章

推荐镜像

更多