温馨提示×

python爬虫session如何处理会话超时

小樊
81
2024-12-10 03:10:32
栏目: 编程语言

在Python中,处理HTTP会话超时通常涉及到设置请求头中的CookieReferer字段,以及适当地处理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、一个会话对象和一个可选的超时参数。函数内部设置了CookieReferer请求头,并尝试发送请求。如果请求超时,它会捕获Timeout异常并递归地调用自身以重试请求。其他请求异常也会被捕获并打印错误信息。通过这种方式,我们可以确保在会话超时时能够适当地处理并重试请求。

0