当前位置: 首页 > news >正文

Python学习第二十八天

日志

日志级别    

  • DEBUG - 调试信息

  • INFO - 一般信息

  • WARNING - 警告信息

  • ERROR - 错误信息

  • CRITICAL - 严重错误

使用

        settings中引入

# 设置日志级别
LOG_LEVEL = 'INFO'

# 日志文件路径 log/ 需要提前建立 如果没有会报错No such file or directory:
LOG_FILE = '../log/scrapy-test.log'

# 日志格式
LOG_FORMAT = '%(asctime)s [%(name)s] %(levelname)s: %(message)s'

# 日志日期格式
LOG_DATEFORMAT = '%Y-%m-%d %H:%M:%S'

# 是否覆盖现有日志文件
LOG_FILE_APPEND = False
def parse(self, response):
    self.logger.debug('This is a debug message')
    self.logger.info('This is an info message')
    self.logger.warning('This is a warning')
    self.logger.error('This is an error')

日志格式

参数描述
%(asctime)s日志记录时间
%(name)s记录器名称 (通常是spider名称)
%(levelname)s日志级别 (DEBUG, INFO等)
%(message)s日志消息文本
%(pathname)s产生日志的源文件路径
%(filename)s文件名部分
%(module)s模块名部分
%(funcName)s函数名
%(lineno)d源代码行号
%(process)d进程ID
%(thread)d线程ID
%(threadName)s线程名称

异常

异常分类

  • CloseSpider - 主动关闭爬虫

  • DropItem - 丢弃 item

  • IgnoreRequest - 忽略请求

  • NotConfigured - 组件未配置

常见异常

异常类别异常类名触发场景典型处理方式使用示例
爬虫控制CloseSpider需要主动终止爬虫运行时记录日志后停止爬虫raise CloseSpider('达到最大页数')
NotConfigured组件缺少必要配置时跳过该组件加载raise NotConfigured('缺少API密钥')
数据处理DropItemItem数据不符合要求时丢弃该Item并记录raise DropItem('缺失必要字段')
ItemErrorItem处理过程中的通用错误根据具体子类处理raise ItemError('数据格式错误')
请求控制IgnoreRequest需要过滤特定请求时跳过该请求raise IgnoreRequest('黑名单域名')
RetryRequest需要重试请求时延迟后重新调度raise RetryRequest('服务不可用')
下载错误TimeoutError请求超时重试或记录failure.check(TimeoutError)
ConnectionError连接失败检查网络或重试except ConnectionError:
DNSLookupErrorDNS解析失败检查域名或重试failure.check(DNSLookupError)
响应处理HttpError非200状态码响应检查状态码处理raise HttpError(response)
ResponseNeverReceived未收到任何响应检查网络或重试failure.check(ResponseNeverReceived)

使用

import scrapy
import os

from scrapy.exceptions import NotConfigured, CloseSpider


# 异常测试
class TestExceptSpider(scrapy.Spider):

    def __init__(self):
        # 初始化为0
        self.item_count = 0

    name = "test_except"
    # 或者直接卸载头部的strt_url中 一样的 为什么知道这个方法  查看父类的spider 集成了 所以使用子类会自动覆盖父类相同方法
    def start_requests(self):
        # 获取当前目录的绝对路径
        current_dir = os.path.dirname(os.path.abspath(__file__))
        file_path = os.path.join(current_dir, 'test.html')
        # 替换反斜杠为正斜杠,并添加 file:/// 前缀
        file_url = 'file:///' + file_path.replace('\\', '/')
        # 使用http.request和request一样 使用request更多一些
        yield scrapy.http.Request(url=file_url, callback=self.parse)

    def parse(self, response):
        # 条件满足时停止爬虫
        if self.item_count >= 1000:
            raise CloseSpider('已达到1000条数据限制')

    # 组件配置检查
    class MyExtension:
        def __init__(self, api_key):
            if not api_key:
                raise NotConfigured('API key必须配置')

相关文章:

  • 游戏引擎学习第195天
  • 8.集成模板引擎
  • 【1-1】ICT=IT+CT
  • MySQL GROUP BY分组获取非聚合列值方法
  • [Android汉化] DuckStation of Android:安卓端 Playstation 模拟器(PSX / PSOne)汉化版
  • Open GL ES ->纹理贴图,顶点坐标和纹理坐标组合到同一个顶点缓冲对象中进行解析
  • 视频推拉流EasyDSS互联网直播点播平台技术特点及应用场景剖析
  • C+++题
  • 解锁全方位健康生活,构筑身心防护网
  • vue前端项目技术架构(第二版)
  • 【LeetCode 热题100】347:前 K 个高频元素(详细解析)(Go语言版)
  • 如何理解Transformer缺乏像CNN那样的归纳偏置
  • 荣耀大数据面试题及参考答案
  • Redis在线安装
  • 【Python使用】嘿马python运维开发全体系教程第1篇:网络设定,系统基本优化【附代码文档】
  • 【C语言】文件操作
  • 导出cad实体所有信息到txt并打开(生成唯一文件名) ——c#cad二次开发
  • 大数据技术之Scala
  • 5、无线通信基站的FPGA实现架构
  • 大厂算法面试 7 天冲刺:第2天-链表算法深度解析 - 高频面试题与Java实战
  • 2025财政观察①长三角罚没收入增速放缓,24城仍在上涨
  • 央行4月开展12000亿元买断式逆回购操作
  • 巴西外长维埃拉:国际形势日益复杂,金砖国家必须发挥核心作用
  • 陈文清:推进扫黑除恶常态化走深走实,有力回应人民群众对安居乐业的新期待
  • 五一假期如何躺赚利息?来看国债逆回购操作攻略
  • 俄罗斯延长非法滞留外国人限期离境时间至9月