• Python爬虫:Session、Cookie、JWT


    当你在Python中进行网络爬虫时,需要处理会话(Session)、Cookie和JWT(JSON Web Token)时,以下是更详细的介绍和示例:

    Session(会话):

    会话用于维护用户的状态和跟踪他们的活动,通常在登录和跨多个页面请求之间非常有用。Python中使用requests库来创建和管理会话:

    import requests
    
    # 创建一个会话对象
    session = requests.Session()
    
    # 在会话中发送GET请求
    response = session.get('https://example.com')
    
    # 在会话中保持登录状态
    login_data = {'username': 'your_username', 'password': 'your_password'}
    session.post('https://example.com/login', data=login_data)
    
    # 使用同一会话发送后续请求
    response = session.get('https://example.com/dashboard')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    使用会话,你可以跨多个请求共享Cookie和其他会话数据,以便保持登录状态。

    Cookie:

    Cookie是一种用于在客户端和服务器之间传递数据的机制。在爬虫中,你可以发送包含Cookie的HTTP请求以模拟已登录的用户。首先,你需要获取登录后的Cookie:

    import requests
    
    # 发送登录请求并获取Cookie
    login_data = {'username': 'your_username', 'password': 'your_password'}
    response = requests.post('https://example.com/login', data=login_data)
    
    # 获取响应中的Cookie
    cookies = response.cookies
    
    # 使用获取的Cookie发送请求
    response = requests.get('https://example.com/dashboard', cookies=cookies)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在此示例中,我们首先发送登录请求,然后从响应中提取Cookie,并将其包含在后续请求中。

    JWT(JSON Web Token):

    JWT是一种用于身份验证和授权的令牌,通常包含在HTTP请求的头部中。要在Python中使用JWT进行身份验证,你需要获取有效的令牌,并将其包含在请求头中:

    import requests
    
    # 获取JWT令牌
    jwt_token = 'your_jwt_token'
    
    # 创建请求头,包含JWT令牌
    headers = {'Authorization': f'Bearer {jwt_token}'}
    
    # 发送包含JWT令牌的请求
    response = requests.get('https://example.com/protected_resource', headers=headers)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    JWT令牌通常包括在Authorization请求头中,前缀为"Bearer"。

    代码案例

    from urllib.parse import urljoin
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import requests
    import time
    
    BASE_URL = 'https://login2.scrape.center/'
    LOGIN_URL = urljoin(BASE_URL, '/login')
    INDEX_URL = urljoin(BASE_URL, '/page/1')
    USERNAME = 'admin'
    PASSWORD = 'admin'
    
    browser = webdriver.Chrome()
    browser.get(BASE_URL)
    browser.find_element(By.CSS_SELECTOR, 'input[name="username"]').send_keys(USERNAME)
    browser.find_element(By.CSS_SELECTOR, 'input[name="password"]').send_keys(PASSWORD)
    browser.find_element(By.CSS_SELECTOR, 'input[type="submit"]').click()
    time.sleep(10)
    
    # get cookies from selenium
    cookies = browser.get_cookies()
    print('Cookies', cookies)
    browser.close()
    
    # set cookies to requests
    session = requests.Session()
    for cookie in cookies:
        session.cookies.set(cookie['name'], cookie['value'])
    
    response_index = session.get(INDEX_URL)
    print('Response Status', response_index.status_code)
    print('Response URL', response_index.url)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    请注意,使用爬虫技术时,务必遵守目标网站的规定和政策。不当使用爬虫可能导致法律问题,因此请确保你的爬虫活动合法,并尊重网站的Robots.txt文件和使用条款。

  • 相关阅读:
    逻辑回归-为什么模型会更加侧重于学习那些数值比较大的列
    身份认证简单介绍
    IO作业:提取文件属性
    MyBatis中有哪些注解呢?
    小程序内容管理系统设计
    钡铼profinet总线模块可以拓展IO
    文件系统 FTP Ubuntu 安装入门介绍
    1320_STM32F103使用串口烧写程序
    基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop
    CSS Modules:重构前端样式的未来?
  • 原文地址:https://blog.csdn.net/rubyw/article/details/133071971