9.3 处理爬虫异常
在网络爬虫中,异常处理是非常重要的一环。由于网络请求的不可预测性(如网络延迟、服务器错误、内容变动等),爬虫程序很容易遇到各种异常情况。因此,学会如何优雅地处理这些异常,对于保证爬虫的稳定性和健壮性至关重要。
常见的异常类型:
HTTPError:当HTTP请求返回了一个不成功的状态码(如404、500等)时抛出。URLError:当URL无效或无法访问时抛出。Timeout:当请求超时时抛出。ConnectionError:当连接服务器时发生错误时抛出。ParseError:在解析HTML或JSON等数据结构时发生的错误。
异常处理的方法:- 使用
try...except语句块来捕获并处理异常。 - 设定合理的超时时间,防止无限等待。
- 对于可重试的错误(如网络波动导致的请求失败),可以使用重试机制。
- 记录异常信息,方便后续分析和调试。
示例:
python
import requests
from requests.exceptions import HTTPError, RequestException
def fetch_url(url):
try:
response = requests.get(url, timeout=5)
response.raise_for_status()# 如果响应状态码不是200,则抛出HTTPError异常
return response.text
except HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
except RequestException as err:
print(f"An error occurred: {err}")
except Exception as e:
print(f"An unexpected error occurred: {e}")