Cookie

反爬策略:Cookie

Cookie

  • 存储在客户端的一组键值对

  • web中cookie的典型应用:

    • 免密登录

cookie和爬虫之间的关联

有时候,对一张页面进行请求的时候,如果请求过程中不携带cookie的话,那么无法请求到对应的数据。因此cookie是爬虫一个非常典型且常见的反爬机制

需求:爬取雪球网的咨询信息

https://xueqiu.com/

分析:

  1. 判断爬取的数据是否为动态加载相关的更多咨询是动态加载的
    • 滚轮滑动到底部的时候会动态加载出更多的咨询数据
  2. 定位到ajax请求的数据包,提取出请求的url,响应数据为json格式的数据

在这里插入图片描述

问题:没有请求到数据

原因:没有严格意义上模拟浏览器发请求

处理:可以将浏览器发请求携带的请求头,全部粘贴在headers字典中,将headers作用到requests请求中即可

Cookie的处理方式

  • 方式一:手动处理

    • 将抓包工具的cookie粘贴到headers中

    • 弊端:cookie如果过了有效时长则该方式时效

  • 方式二:自动处理

    • 基于Session对象实现自动处理

    • 如何获取一个session对象:requests.Session()返回一个对象

    • session对象的作用:

      • 该对象可以向requests一样调用get和post发起指定的请求只不过,如果在使用session发请求的过程中如果产生了cookie,则该cookie会被自动存储到该对象中,那么就意味着下次再次使用session对象发起请求,则该对象请就是携带cookie进行的请求发送
    • 在爬虫使用session的时候,session对象至少会被使用几次?

      • 两次。第一次使用session是为了将cookie捕获并且存储到session对象中,下次的时候就是携带cookie进行请求的
    import os
    import pymongo
    import requests
    from lxml import etree
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.3538.77 Safari/537.36'
    }
    
    # 1、创建Session对象
    session = requests.Session()
    # 2、第一次使用session捕获并且存储cookie,猜测对雪球网的首页发起请求可能会产生cookie
    main_url = 'https://xueqiu.com/'
    # 为了捕获cookie
    session.get(url=main_url, headers=headers)
    
    # 3、二次携带cookie请求
    url = 'https://xueqiu.com/statuses/hot/listV2.json?since_id=-1&max_id=246621&size=15'
    response = session.get(url=url, headers=headers).json()
    
    print(response)
    
    

    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值