在Python网络请求中,处理状态码、请求头和响应体是常见的任务。以下是如何处理这些元素以及如何使用请求头来模拟用户代理以躲避某些检查的示例。
状态码处理
状态码是HTTP响应的一部分,用来表示请求的结果。例如,200表示成功,404表示未找到,500表示服务器错误等。
import requests
response = requests.get('http://example.com')
if response.status_code == 200:
print('请求成功')
elif response.status_code == 404:
print('资源未找到')
else:
print('请求失败,状态码:', response.status_code)
请求头和响应体处理
请求头通常包含元信息,如User-Agent
、Accept
等,而响应体则包含服务器响应的数据。
# 设置请求头
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'
}
response = requests.get('http://example.com', headers=headers)
# 打印响应头和响应体
print('响应头:', response.headers)
print('响应体:', response.text)
模拟请求头躲避检查
有些网站可能会检查User-Agent
或其他请求头来确定是否为爬虫。通过设置合适的请求头,你可以模拟浏览器访问,以躲避一些基本的检查。
# 模拟常见浏览器的User-Agent
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15',
'Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1',
# 更多User-Agent字符串...
]
# 随机选择一个User-Agent
import random
headers = {
'User-Agent': random.choice(user_agents)
}
response = requests.get('http://example.com', headers=headers)
print(response.text)
使用Session保持Cookies
有时,你需要保持会话,例如登录后保持登录状态。
session = requests.Session()
# 访问登录页面
login_url = 'http://example.com/login'
login_data = {
'username': 'your_username',
'password': 'your_password'
}
session.post(login_url, data=login_data)
# 现在session保持了登录状态的cookies
response = session.get('http://example.com/protected_page', headers=headers)
print(response.text)
异常处理
在网络请求中,处理异常是很重要的,比如连接错误、超时等。
try:
response = requests.get('http://example.com', timeout=0.01)
except requests.exceptions.Timeout:
print('请求超时')
except requests.exceptions.ConnectionError:
print('连接错误')
except requests.exceptions.RequestException as e:
print('请求异常:', e)