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

爬虫程序中如何添加异常处理?

在爬虫程序中添加异常处理是确保程序稳定性和可靠性的关键步骤。异常处理可以帮助你在遇到错误时捕获问题、记录日志,并采取适当的措施,而不是让程序直接崩溃。以下是一些常见的异常处理方法和示例,帮助你在爬虫程序中实现健壮的错误处理机制。

一、捕获异常

在 PHP 中,可以使用 try-catch 块来捕获异常。在爬虫程序中,常见的异常包括网络请求失败、页面解析错误、数据缺失等。

示例代码

php

<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;function get_page($url) {try {$client = new Client();$response = $client->request('GET', $url, ['headers' => ['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']]);return $response->getBody()->getContents();} catch (\Exception $e) {// 记录异常信息error_log("请求失败: " . $e->getMessage());return null;}
}

二、重试机制

在捕获异常后,可以设置重试机制,尝试重新发送请求。这在处理网络请求失败时特别有用。

示例代码

php

<?php
function get_page_with_retry($url, $max_retries = 3) {$attempts = 0;while ($attempts < $max_retries) {try {$client = new Client();$response = $client->request('GET', $url, ['headers' => ['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']]);return $response->getBody()->getContents();} catch (\Exception $e) {$attempts++;error_log("请求失败,尝试重新发送: " . $e->getMessage());if ($attempts >= $max_retries) {error_log("达到最大重试次数,请求失败");return null;}}}
}

三、日志记录

记录详细的日志信息可以帮助你在出现问题时快速定位和解决问题。可以使用 PHP 的 error_log 函数或第三方日志库(如 Monolog)来记录日志。

示例代码

php

<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;// 创建日志记录器
$log = new Logger('crawler');
$log->pushHandler(new StreamHandler('logs/crawler.log', Logger::WARNING));function get_page($url) {try {$client = new Client();$response = $client->request('GET', $url, ['headers' => ['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']]);return $response->getBody()->getContents();} catch (\Exception $e) {$log->error("请求失败: " . $e->getMessage());return null;}
}

四、处理页面解析异常

在解析 HTML 内容时,可能会遇到页面结构变化或数据缺失等问题。可以通过捕获异常并记录日志来处理这些问题。

示例代码

php

<?php
use Symfony\Component\DomCrawler\Crawler;function parse_product_details($html) {try {$crawler = new Crawler($html);$products = [];$crawler->filter('.m-itemlist .items .item')->each(function (Crawler $node) use (&$products) {$title = $node->filter('.title')->text();$price = $node->filter('.price')->text();$shop = $node->filter('.shop')->text();$products[] = ['title' => trim($title),'price' => trim($price),'shop' => trim($shop)];});return $products;} catch (\Exception $e) {error_log("页面解析失败: " . $e->getMessage());return [];}
}

五、总结

通过上述方法,你可以在爬虫程序中添加异常处理机制,确保程序在遇到错误时能够稳定运行。捕获异常、设置重试机制、记录日志以及处理页面解析异常是提高爬虫程序健壮性的关键步骤。希望这些方法能帮助你在爬虫开发中更好地应对各种挑战。

http://www.xdnf.cn/news/4160.html

相关文章:

  • Vi/Vim 编辑器详细指南
  • Facebook如何运用AI实现元宇宙的无限可能?
  • DC-DC降压型开关电源(Buck Converter)设计中,开关频率(f sw​ )、滤波电感(L)和滤波电容(C out​ )的关系和取舍
  • uniapp 全局混入:监听路由变化,路由变化即执行
  • 嵌入式openharmony标准鸿蒙系统驱动开发基本原理与流程
  • openssl 生成自签名证书实现接口支持https
  • 【coze】手册小助手(提示词、知识库、交互、发布)
  • C++中指针使用详解(4)指针的高级应用汇总
  • 人工智能对人类的影响
  • 【Hive入门】Hive安全管理与权限控制:审计日志全解析,构建完善的操作追踪体系
  • kubeadm部署k8s
  • openwrt 使用quilt 打补丁(patch)
  • 基于图像处理的道路监控与路面障碍检测系统设计与实现 (源码+定制+开发) 图像处理 计算机视觉 道路监控系统 视频帧分析 道路安全监控 城市道路管理
  • 计算机视觉与深度学习 | 基于数字图像处理的裂缝检测与识别系统(matlab代码)
  • 【Python系列】Python 中的 HTTP 请求处理
  • OpenAI的“四面楚歌”:从营利到非营利,一场关于AGI控制权的革命
  • 信息时代的政治重构:网络空间与主权的未来
  • 搭建spark yarn 模式的集群
  • mybatis 的多表查询
  • Nacos源码—4.Nacos集群高可用分析四
  • 【Linux网络】应用层协议HTTP
  • Ubuntu18.04搭建samda服务器
  • ORACLE EBS 12.1 启用https 简单策略
  • 谷歌在即将举行的I/O大会之前,意外泄露了其全新设计语言“Material 3 Expressive”的细节
  • 如何通过外网访问内网?对比5个简单的局域网让互联网连接方案
  • 单应性估计
  • 《深入探索位操作符:Python、Java与C语言的实现与应用》
  • UE5 渲染思路笔记(角色)
  • Linux 磁盘初始化与扩容操作手册
  • nnUNet V2修改网络——暴力替换网络为Swin-Unet