• 反扒机制(懒加载及cookie)


    反扒机制:图片的懒加载

    • 站长素材高清图片下载
    • 反扒机制:图片懒加载,广泛应用于一些图片网站中
      • 只有当图片真正显示在浏览器可视化范围内才会将img标签的伪属性变成真正的属性,如果是requests发请求,requests请求是没有可视化范围的,因此我们一定要解析的是img伪属性的属性值(图片地址,例如站长素材就是可视化src,伪属性是src2,所以只要爬取src2属性即可)
    • 学过的反爬机制:
      • robots
      • UA伪装
      • 动态加载数据的捕获
      • 图片懒加载

    cookie:

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

    • web中cookie的典型应用:

      ​ -----免密登录

    • cookies和爬虫之间的关联

      • 有时,对一张页面进行请求的时候,如果请求过程中不携带cookie的话,那么我们无法请求到正确的页面数据。因此cookie是爬虫常见的一种典型反扒机制。
    • 需求:爬取雪球网中的咨询信息。https://xueqiu.com/

    • 分析:

      • 1.判定爬取的咨询数据是否为动态加载的
        • 相关的更多咨询数据是动态加载的,滚轮滑动到底部的时候会动态加载出更多咨询数据。
      • 2.定位到ajax请求的数据包,提取出请求的url,响应数据为json形式的咨询数据
    import requests
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
    }
    #这是雪球网发ajax获取数据的网址
    url = 'https://xueqiu.com/v4/statuses/public_timeline_by_category.json?since_id=-1&max_id=20369434&count=15&category=-1'
    page_text = requests.get(url=url,headers=headers).json()
    page_text
    
    结果:{'error_description': '遇到错误,请刷新页面或者重新登录帐号后再试',
     'error_uri': '/v4/statuses/public_timeline_by_category.json',
     'error_data': None,
     'error_code': '400016'}
    
    • 问题:我们没有请求到我们想要的数据

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

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

      • 方式1:手动处理

        • 将抓包工具中的cookie粘贴在headers中
        • 弊端:如果cookies过了有效时长则该方法失效
      • 方式2:自动处理

        • 基于Session对象实现自动处理
        • 如何获取一个session对象,requests.Session()返回一个session对象
        • session对象的作用:
          • 该对象可以像requests一样调用get和post请求。只不过如果在使用session发请求的过程中产生了cookie,则cookie会被自动存储到该session对象中,那么就意味这那么就意味着下次再次使用session对象发起请求,则该次请求就是携带cookie进行的请求发送。
        • 在爬虫中使用session的时候,session对象至少被使用2次!
          • 第一次是使用session是为了将cookie捕获自动存储在session对象中,对首页发起请求
          • 第二次就是携带cookie进行的请求发送。
        #创建好session对象
        session = requests.Session()
        #第一次使用session捕获且存储cookie,猜测对雪球网的首页发起的请求可能会产生cookie
        main_url = "https://xueqiu.com"
        session.get(main_url,headers=headers) #捕获且存储cookie
        url = 'https://xueqiu.com/v4/statuses/public_timeline_by_category.json?since_id=-1&max_id=20369434&count=15&category=-1'
        page_text = session.get(url=url,headers=headers).json() #携带cookie发起的请求
        
  • 相关阅读:
    浏览器HTML5支持程度测试
    Unit testing Cmockery 简单使用
    Linux likely unlikely
    Android development tools line_endings hacking
    Linux C enum
    Android 系统内置App JNI
    Android Broadcast Receiver
    Android获取SharedPreferences失败,且App无法启动
    Sublime-text markdown with Vim mode and auto preview
    遍历Map key-value的两种方法
  • 原文地址:https://www.cnblogs.com/zzsy/p/12687591.html
Copyright © 2020-2023  润新知