跳转至

为爬虫添加日志:知道程序做了什么

日志用于回答三个问题:程序请求了什么、结果如何、为什么失败。它比随处 print() 更适合长期维护,因为日志有等级、统一格式和输出位置。

1. 最小配置

import logging

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s",
)
logger = logging.getLogger(__name__)

在脚本中使用:

logger.info("请求页面:%s", url)
logger.warning("页面项目数异常:%s", count)
logger.exception("解析失败:%s", url)

logger.exception() 应在 except 块内使用,它会附带异常堆栈,便于定位错误。

2. 建议记录的字段

  • 请求 URL 与最终 URL
  • HTTP 状态码、响应内容类型和耗时
  • 解析到的卡片数、成功写入数、跳过数
  • 失败类型与异常信息
  • 当前页码或任务批次标识

避免在日志中写入 Cookie、认证头、令牌、个人信息或整页原始 HTML。日志也属于需要保护的数据。

3. 日志等级的简单约定

等级 适合记录
DEBUG 调试选择器、局部响应信息
INFO 正常进度和汇总
WARNING 可继续但值得关注的异常,如字段缺失
ERROR 当前 URL 或任务失败

不要把正常的每条数据都写为 WARNING,否则真正的问题会被淹没。

4. 用日志替代“悄悄失败”

如果某页解析失败,应记录 URL 和原因,并根据任务策略停止、跳过或等待后再试。不要使用空的 except: pass;它会让数据缺失而没有任何线索。

参考

评论