反扒机制(懒加载及cookie)
时间:2020-04-12
本文章向大家介绍反扒机制(懒加载及cookie),主要包括反扒机制(懒加载及cookie)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
反扒机制:图片的懒加载
- 站长素材高清图片下载
- 反扒机制:图片懒加载,广泛应用于一些图片网站中
- 只有当图片真正显示在浏览器可视化范围内才会将img标签的伪属性变成真正的属性,如果是requests发请求,requests请求是没有可视化范围的,因此我们一定要解析的是img伪属性的属性值(图片地址,例如站长素材就是可视化src,伪属性是src2,所以只要爬取src2属性即可)
- 学过的反爬机制:
- robots
- UA伪装
- 动态加载数据的捕获
- 图片懒加载
反扒机制 : cookie
cookie:
-
是存储在客户端的一组键值对。
-
web中cookie的典型应用:
-----免密登录
-
cookies和爬虫之间的关联
- 有时,对一张页面进行请求的时候,如果请求过程中不携带cookie的话,那么我们无法请求到正确的页面数据。因此cookie是爬虫常见的一种典型反扒机制。
-
需求:爬取雪球网中的咨询信息。https://xueqiu.com/
-
分析:
- 1.判定爬取的咨询数据是否为动态加载的
- 相关的更多咨询数据是动态加载的,滚轮滑动到底部的时候会动态加载出更多咨询数据。
- 2.定位到ajax请求的数据包,提取出请求的url,响应数据为json形式的咨询数据
- 1.判定爬取的咨询数据是否为动态加载的
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发起的请求
-
原文地址:https://www.cnblogs.com/zzsy/p/12687591.html
- 迈克尔•戴尔:人工智能杀手?技术反乌托邦?不存在的
- 你知道吗?多个类多线程环境下静态构造函数的执行顺序
- 云端架构师养成之三:微信也在用的消息队列服务
- 现在 tensorflow和mxnet 很火,是否还有必要学习 scikit-learn 等框架?
- ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上
- 改进版CodeTimer及XCode性能测试
- 常见测试术语解析
- 秦俊:开放 DevOps 敏捷开发套件,助力开发者驰骋云端
- 开源组件NanUI一周年-使用HTML/CSS/JS来构建.Net Winform应用程序界面
- 邱寒:新零售笔记(四)基于区块链大数据的人工智能
- 腾讯云GAME-TECH沙龙干货回顾:网龙《英魂之刃口袋版》开发经验分享
- ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
- 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络AlexNet
- 黄荣奎:如何快速、便捷开发小程序
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python字符串的index和find的区别详解
- 浅谈Python 参数与变量
- 宝塔面板成功部署Django项目流程(图文)
- Python celery原理及运行流程解析
- Python Scrapy图片爬取原理及代码实例
- Python-for循环的内部机制
- 解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
- 基于python实现模拟数据结构模型
- keras的siamese(孪生网络)实现案例
- 浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
- Python数据可视化图实现过程详解
- Python matplotlib 绘制双Y轴曲线图的示例代码
- keras 读取多标签图像数据方式
- python新手学习可变和不可变对象
- COS Android SDK DEMO搭建实践