Table of Contents:
  1. 前提说明
    1. 具体实现及说明
      1. 引入模块
        1. 建立会话
          1. 修改headers信息
            1. 增加cookies
              1. 模拟登录
              2. requests和测试框架selenium的对比

                requests保持会话

                Reading Time:The full text has 421 words, estimated reading time: 3 minutes
                Creation Date:2017-10-17
                Article Tags:
                Previous Article:搭建开发环境
                Next Article:Django插件收集
                 
                BEGIN

                前提说明

                爬虫的最主要的坑莫过于反爬,用户认证把一大批爬虫拒之门外,而如何模拟用户登录、保持会话其实很简单,通过requests模块就可以实现。以下为项目经验摘录。

                实验的目标网址通过分配sissionID给浏览器来保持会话状态。

                具体实现及说明

                引入模块

                import requests

                建立会话

                rs = requests.Session()

                修改headers信息

                如修改请求头的User-Agent:rs.headers.update({'User-Agent': 'string'})

                增加cookies

                分配给我们的sessionID其实就是一个cookie值,我们可以存放在redis,每次使用前先判断sessionID是否还有效,避免每次都重新登录。

                实例化一个RequestsCookieJar对象,rs.cookies其实就是这个对象cj = requests.cookies.RequestsCookieJar()

                向RequestsCookieJar对象写入cookie键值对cj.set(key, value, domain='xxx.com', path='/path')

                替换cookie对象rs.cookies = cj

                模拟登录

                登录就是激活会话状态的过程,及后端标记此sessionID为已登录状态,然后下次cookie中带这个sessionID就是已经登录的啦。激活成功后,访问域名下的所有子页面都是已登录状态,请求时会自动带上cookie值。

                假设登录接口为login_path,为post请求,登录用的数据保存在对象login_data中,此时可以rs.post(login_path, data=login_data)

                requests和测试框架selenium的对比

                | requests | selenium :-: | :-: | :-: 执行速度 | 快 | 慢 学习周期(相对) | 短 | 长 结果可预见 | 弱 | 强 额外依赖 | 无 | 各浏览器厂商发布的驱动 应用范围(个人理解,具体还应结合实际需求) | 认证简单的网站,如仅通过sessionID认证 | 认证复杂的网站

                FINISH
                Previous Article:搭建开发环境
                Next Article:Django插件收集

                Random Articles
                Life Countdown
                default