零基础写python爬虫之HTTP异常处理

  • Post category:Python

零基础写Python爬虫之HTTP异常处理

在进行Python爬虫开发时,最常见的问题就是因为网络不稳定导致请求失败。为了便于处理这些异常情况,我们需要掌握如何进行HTTP异常处理。

1. HTTP状态码

在进行HTTP异常处理时,首先需要了解HTTP状态码的含义,常见的HTTP状态码有:

  • 200 OK:请求成功
  • 301 Moved Permanently:永久性重定向到其他网址
  • 302 Found:临时性重定向到其他网址
  • 304 Not Modified:文档没有改变,可以使用缓存的版本
  • 403 Forbidden:禁止访问
  • 404 Not Found:未找到文件或者目录
  • 500 Internal Server Error:服务器内部错误
  • 503 Service Unavailable:服务不可用

2. HTTP异常处理的方法

在Python中,我们可以利用requests模块实现HTTP请求,同时也可以通过该模块进行HTTP异常处理。具体而言,可以利用try-except语句结构进行异常处理,如下所示:

import requests

url = 'https://www.example.com'

try:
    response = requests.get(url)
    response.raise_for_status()
    # 若response的status_code不是200,则会抛出HTTPError异常
except requests.HTTPError as e:
    print('HTTP异常:', e)
except requests.ConnectionError as e:
    print('连接异常:', e)
except requests.Timeout as e:
    print('超时异常:', e)
except requests.RequestException as e:
    print('其他异常:', e)
else:
    print('请求成功')

上述代码中,我们首先定义了一个url变量,然后使用requests.get()方法进行HTTP请求,并使用response.raise_for_status()方法检查返回的状态码是否正常(即是否为200)。如果状态码不正常,则会依次进入对应的异常处理分支中,分别处理HTTP异常、连接异常、超时异常以及其他异常。如果状态码正常,则执行try语句块下面的操作,即打印请求成功的消息。

3. 示例程序

下面提供两个有关HTTP异常处理的示例程序。

示例1:利用HTTP异常处理请求html页面

该程序用于请求指定的HTML页面,如果请求失败则会输出HTTP异常信息。

import requests

url = 'https://www.baidu.com/index.html'

try:
    response = requests.get(url)
    response.raise_for_status()
except requests.HTTPError as e:
    print('HTTP异常:', e)
except requests.ConnectionError as e:
    print('连接异常:', e)
except requests.Timeout as e:
    print('超时异常:', e)
except requests.RequestException as e:
    print('其他异常:', e)
else:
    print(response.text)

示例2:利用HTTP异常处理请求API接口

该程序用于请求指定的API接口,如果请求失败则会输出HTTP异常信息。同时,该程序还演示了如何利用requests模块传递请求参数。

import requests

url = 'https://api.github.com/user/repos'

params = {'type': 'public'}

try:
    response = requests.get(url, params=params)
    response.raise_for_status()
except requests.HTTPError as e:
    print('HTTP异常:', e)
except requests.ConnectionError as e:
    print('连接异常:', e)
except requests.Timeout as e:
    print('超时异常:', e)
except requests.RequestException as e:
    print('其他异常:', e)
else:
    repos = response.json()
    for repo in repos:
        print(repo['name'])

上述示例中,我们结合了API接口和请求参数的演示。在这个例子中,我们请求的是Github公开的API接口,请求参数中包含type参数,该参数值为public,表示获取公开的仓库列表。如果请求成功,则会输出所有公开的仓库名称。如果请求失败,则会输出HTTP异常信息。

总结

本文介绍了Python爬虫中常见的HTTP异常处理方法,包括HTTP状态码、HTTP异常处理的方法以及示例程序。在实际开发中,需要根据具体的情况选择合适的异常处理方法,以保证程序的稳定性和可靠性。