在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
异常并递归地调用自身以重试请求。其他请求异常也会被捕获并打印错误信息。通过这种方式,我们可以确保在会话超时时能够适当地处理并重试请求。