在Python中,处理HTTP会话超时通常涉及到设置请求头中的Cookie
和Referer
字段,以及适当地处理HTTP异常。以下是一个使用requests
库的示例,展示了如何在爬虫中处理会话超时:
import requests
from requests.exceptions import RequestException, Timeout
def send_request(url, session, timeout=5):
headers = {
'Cookie': session.cookies.get_dict(),
'Referer': 'https://example.com' # 根据目标网站设置合适的Referer
}
try:
response = session.get(url, headers=headers, timeout=timeout)
response.raise_for_status() # 如果响应状态码不是200,抛出异常
return response
except Timeout:
print("请求超时,正在重试...")
return send_request(url, session, timeout) # 超时后重试请求
except RequestException as e:
print(f"请求发生错误: {e}")
return None
# 创建一个会话对象
session = requests.Session()
# 设置会话头信息(如有必要)
session.headers.update({
'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'
})
url = "https://example.com"
response = send_request(url, session)
if response:
print(response.text)
else:
print("请求失败")
在这个示例中,我们定义了一个send_request
函数,它接受一个URL、一个会话对象和一个可选的超时参数。函数内部设置了Cookie
和Referer
请求头,并尝试发送请求。如果请求超时,它会捕获Timeout
异常并递归地调用自身以重试请求。其他请求异常也会被捕获并打印错误信息。通过这种方式,我们可以确保在会话超时时能够适当地处理并重试请求。