常见的反爬措施:UA反爬和Cookie反爬
摘要:为了屏蔽这些垃圾流量,或者为了降低自己服务器压力,避免被爬虫程序影响到正常人类的使用,开发者会研究各种各样的手段,去反爬虫。
本文分享自华为云社区《Python爬虫反爬,你应该从这篇博客开启,UA反爬,Cookie 特定参数反爬》,作者:梦想橡皮擦。
你或许已经注意到,对于目标站点来说,爬虫程序是机器访问,从目标站点的角度来看,爬虫带来的流量都是“垃圾流量”,是完全没有价值的(刷量类爬虫除外)。
为了屏蔽这些垃圾流量,或者为了降低自己服务器压力,避免被爬虫程序影响到正常人类的使用,开发者会研究各种各样的手段,去反爬虫。
爬虫与反爬虫是一对共生关系,有爬虫工程师,就必然存在反爬工程师,很多时候,爬虫工程师与反爬工程师都在斗智斗勇。
反爬没有特定的分类,如果一个网站上了反爬代码,一般情况下会使用几种反爬措施搭配使用。
服务器验证请求信息类爬虫
本系列的博客从最简单的反爬手段开始学习,入门级反爬:“User-Agent” 用户代理反爬。
User-Agent
用户代理(User-Agent),表示的是用户的浏览器相关信息,该反爬逻辑是通过服务器端验证请求头中的 User-Agent 参数,然后区分是爬虫程序还是正常的浏览器访问。
访问任意网站,唤醒开发者工具,然后在控制台中输入 navigator.userAgent,就可以获取到 UA 字符串(User-Agent 字符串)。

UA 字符串的格式一般可以这么理解:
平台 引擎版本 浏览器版本信息
如果在详细分解,可以得到如下格式:
浏览器标识 (操作系统标识;加密等级;浏览器语言) 引擎版本 浏览器版本信息
这样你在看上图所示的内容,就比较容易理解其含义了。
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
在不同的浏览器测试,你会发现 UA 字符串都以 Mozilla 开头,这是由于历史上的浏览器大战,导致的遗留问题。
下面对比市面上主流的三款浏览器的 UA 字符串。
# 谷歌浏览器
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
# 火狐浏览器
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
# IE11 浏览器
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko
分析上述内容中的相关数据含义
- Mozilla/5.0:表示浏览器;
- Windows NT 6.1:操作系统,我这里得到的是 Windows 7 操作系统;
- Win64/WOW64:64 位操作系统;
- x64:发行版本;
- N,I,U:加密等级,这里没有出现;
- AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36:这个如果你去研究,也有很多趣事,不过咱们理解其是浏览器的版本就可以了。
有了基本的认知之后,我们就可以任意的去编写不同的浏览器标识了(多数时候是从开发者工具中直接复制)
相应的,服务器也能从这个字符串中,识别出访问它的浏览器相关信息(其实操作系统的信息也会被携带过去,甚至它可以验证该 UA 字段是否复合特定的规则)
案例实操环节
拿 CSDN 热榜进行测试,如果不设置 UA 字段,你将获取不到任何返回数据,你可以将下述 headers 置为空值,然后查看运行结果。
import requests
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}
res = requests.get('https://blog.csdn.net/phoenix/web/blog/hot-rank?page=0&pageSize=25', headers=headers)
print(res.text)
User-Agent 生成
可以使用 Python 第三方库,pip install fake_useragent,也可以自己维护一个 UA 类。与 User-Agent 参数相同的还有 HOST 与 Referer,都可以认为的设置一些信息进行反爬。
Cookie 反爬虫
使用 Cookie 验证,也是常见的反爬,由于目标站点可遇不可求,所以接下来的内容从理论层面说明,在后续会结合复杂的案例进行实操。
Cookie 反爬虫最简单的手段
服务器端使用特殊的 Cookie 值进行验证,如果发现传递过去的 Cookie 值不存在,或者不符合生成规范,则不返回数据。
例如服务器验证固定 Cookie 字段,在前文获取热榜代码中,如果你不携带某些 Cookie 值,那得到的就不是完整的数据(可自行测试,差异值为 username)。
还有一种情况是验证 Cookie 是否符合某种格式,例如 Cookie 由 JS 动态生成,而且复合某种潜在(开发者约定)的规则,那该 Cookie 值传递到后台之后,后台工程师直接验证该值即可实现反爬效果,例如 Cookie 规则为 123abc123,前面 3 个随机数,后面 3 个随机数,中间三个随机小写字母,那后台工程师就可以通过正则验证客户端传递的 Cookie 值,是否复合规则,不符合,直接返回异常信息。
当然这种手段很容易被识别出来,进一步还可以加入时间戳,后台工程师拿到 Cookie 中的时间戳之后,验证当前时间的差值,如果超过了某个值,也可以认为该 Cookie 是伪造的。
Cookie 还被用于用户身份的验证,例如很多站点的数据只有登录之后才可以访问,原因是 Cookie 记录了用户信息,Cookie 的这个应用场景比较多,例如华为云博客的系统消息页面
https://developer.huaweicloud.com/usercenter/mysysmessage
点击之后会跳转到登录页面,但如果你在请求头携带 Cookie 访问,则得到对应内容,其中最重要的一个 Cookie 字段是 HWS_ID,测试代码如下,你可以从开发者工具中复制出对应的 Cookie 字段访问该页面。
import requests
from lxml import etree headers = {
"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36",
"cookie": '你的HWS_ID Cookie值;'
}
res = requests.get('https://developer.huaweicloud.com/usercenter/mysysmessage', headers=headers, allow_redirects=False)
with open("./1.html", "w", encoding="utf-8") as f:
f.write(res.text)
elements = etree.HTML(res.text)
print(elements.xpath("//title/text()"))
常见的反爬措施:UA反爬和Cookie反爬的更多相关文章
- scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战
scrapy——4 常用的反爬虫策略有哪些 怎样使用logging设置 Resquest/Response重要参数有哪些 Scrapy怎么发送POST请求 动态的设置User-Agent(随即切换Us ...
- 【Python3爬虫】常见反爬虫措施及解决办法(二)
这一篇博客,还是接着说那些常见的反爬虫措施以及我们的解决办法.同样的,如果对你有帮助的话,麻烦点一下推荐啦. 一.防盗链 这次我遇到的防盗链,除了前面说的Referer防盗链,还有Cookie防盗链和 ...
- 大众点评评论数据抓取 反爬虫措施有css文字映射和字体库反爬虫
大众点评评论数据抓取 反爬虫措施有css文字映射和字体库反爬虫 大众点评的反爬虫手段有那些: 封ip,封账号,字体库反爬虫,css文字映射,图形滑动验证码 这个图片是滑动验证码,访问频率高的话,会出 ...
- Atitit.反编译apk android源码以及防止反编译apk
Atitit.反编译apk android源码以及防止反编译apk 1.1. Tool apk逆向助手1 1.2. 二.使用dex2jar + jd-gui 得到apk的java源码1 1.3. 用 ...
- 【反编译系列】一、反编译代码(dex2jar + jd-gui)和反编译资源(apktool)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! [反编译系列]二.反编译代码(jeb) [反编译系列]三.反编译神器(jadx) [反编译系列]四.反编译so文件(IDA_Pro) 概述 ...
- 解决AndroidKiller APK 反编译失败,无法继续下一步源码反编译!
报错背景 今天使用AndroidKiller V1.3.1,反编译一个APK,遇到如下报错: 当前 Apktool 使用版本:Android Killer Default APKTOOL 正在反编译 ...
- 【Python3爬虫】常见反爬虫措施及解决办法(一)
这一篇博客,是关于反反爬虫的,我会分享一些我遇到的反爬虫的措施,并且会分享我自己的解决办法.如果能对你有什么帮助的话,麻烦点一下推荐啦. 一.UserAgent UserAgent中文名为用户代理,它 ...
- python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制
CrawlSpider实现的全站数据的爬取 新建一个工程 cd 工程 创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com 连接提取器Link ...
- 【Python3爬虫】常见反爬虫措施及解决办法(三)
上一篇博客的末尾说到全网代理IP的端口号是经过加密混淆的,而这一篇博客就将告诉你如何破解!如果觉得有用的话,不妨点个推荐哦~ 一.全网代理IP的JS混淆 首先进入全网代理IP,打开开发者工具,点击查看 ...
随机推荐
- CTO(技术总监)平时都在做些什么?
目前创业,最后一家公司任职医疗科技公司的研发中心总经理,之前也在几家公司的任职研发/技术总监岗位,在我理解的范围,目前国内中小企业对于CTO/技术总监的岗位区别没有那么明确的职能区分. 1. 先总结 ...
- 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)
1.简介 今天继续操作Excle,小伙伴或者童鞋们是不是觉得宏哥会介绍第三种工具操作Excle,今天不介绍了,有两种就够用了,其实一种就够用了,今天主要是来介绍如何使用不同的数据类型读取Excel文件 ...
- 渗透测试工具篇之目录扫描工具dirmap
(一)dirmap介绍 一个高级web目录扫描工具,功能将会强于DirBuster.Dirsearch.cansina.御剑 (二)dirmap安装 打开浏览器输入https://github.com ...
- NSSCTF-finalrce
菜狗的我打开题目之后,人都给我吓傻了,直接过滤的超出了我的认知 菜狗直接就枯了,这个题目其实是不难的,就是比较阴间的一个题目,审计代码,可以看到最后一行的代码"exec($url)&quo ...
- [题解]第十一届北航程序设计竞赛预赛——D.最大公约数
题目描述 给一个长度为n(1<=n<=100000)的正整数列,分成尽量多的非空段,使得每一段的最大公约数相等.一个数的最大公约数是它本身. 解题思路 要求每一段子列的gcd相等,不妨设为 ...
- 金融数据分析还能这样做?快试试这个BI工具小白也能学会!
说起银行.保险.股票投资等这些金融行业,大多数人都认为它们都是依靠数据驱动的企业,毕竟大数据的诞生本来就是为了金融信息流通而服务的,但是事实真的是这样吗? 事实并非如此,真正在金融行业做数据分析的人, ...
- Python常用内建模块和第三方库
目录 内建模块 1 datetime模块(处理日期和时间的标准库) datetime与timestamp转换 str与datetime转换 datetime时间加减,使用timedelta这个类 转 ...
- 教程1--安装Git软件
在https://git-scm.com/下载git for windows,双击安装即可. (1)单击Next (2)选择安装目录 (3)勾选创建桌面快捷方式.Git Bash.Git GUi.已经 ...
- Docker入坑系列(一)
Docker入坑系列(一) 引用嘛,当然是来引用别人说的东西啦. Docker 是一个开源项目,诞生于 2013 年初,它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux ...
- Qt:QVector
0.说明 template <typename T> class QVector QVector是存储同一个类型T数据的模板类,其功能是动态数组,数据在其中的存储是一系列连续的存储空间. ...