Python网络请求实践: requests库的基本使用教程
网络请求是爬虫的核心。在Python中,requests库是执行HTTP请求的首选库,其设计目标是使HTTP请求更加简单快捷。这个教程将引导你了解如何使用requests库进行网络请求。
安装requests库
在开始之前,请确保你的环境中安装了requests库。如果还没有安装,可以通过以下命令进行安装:
pip install requests
发送简单的HTTP请求
requests提供了直观的方法来发送HTTP请求。这里是一些最常见的请求类型:
import requests
# 发送GET请求
response = requests.get('https://httpbin.org/get')
# 发送POST请求
data_to_send = {'key': 'value'}
response = requests.post('https://httpbin.org/post', data=data_to_send)
# 发送PUT请求
response = requests.put('https://httpbin.org/put', data=data_to_send)
# 发送DELETE请求
response = requests.delete('https://httpbin.org/delete')
每次请求后,requests会返回一个Response对象,包含服务器响应的所有信息。
处理响应内容
Response对象有多个属性和方法,可以让你访问响应的内容和其他元数据:
# 获取状态码
status_code = response.status_code
# 获取响应头
headers = response.headers
# 获取响应的文本内容
text_content = response.text
# 获取响应的字节内容
byte_content = response.content
# 获取JSON响应的内容(如果响应是JSON格式)
json_content = response.json()
带参数的请求
requests可以让你发送带参数的请求。参数可以通过URL(对于GET请求)或通过data或json参数(对于POST请求)发送。
# GET请求带URL参数
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
# POST请求带数据
form_data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', data=form_data)
# POST请求带JSON数据
json_data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', json=json_data)
处理异常
在进行网络请求时,各种异常情况都有可能发生,比如网络问题、超时等。requests有几个异常类来帮助你处理这些问题:
from requests.exceptions import HTTPError, Timeout
try:
response = requests.get('https://httpbin.org/get', timeout=0.01)
response.raise_for_status() # 将触发HTTPError,如果请求返回了不成功的状态码
except HTTPError as http_err:
print(f'HTTP error occurred: {http_err}')
except Timeout:
print('The request timed out')
except Exception as err:
print(f'Other error occurred: {err}')
练习示例代码
现在,让我们来练习一段示例代码,尝试从一个实际的API获取数据。
import requests
def fetch_user_details(username):
url = f'https://api.github.com/users/{username}'
response = requests.get(url)
return response.json()
# 获取GitHub用户的详情
user_details = fetch_user_details('octocat')
print(user_details)
在这个函数中,我们从GitHub API请求了一个用户的数据。如果你将'octocat'替换为其他GitHub用户名,你可以获取该用户的数据。
这就是使用requests库进行网络请求的基础。在爬虫中,你将使用这些技术来获取网页内容,然后对其进行解析和数据提取。在接下来的学习中,你会更深入地探索如何处理复杂的请求和响应,以及如何有效地管理HTTP会话和认证。