本文分享自华为云社区《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 requestsheaders = {"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 的这个应用场景比较多,例如华为云博客的系统消息页面

系统消息_开发者-华为云

点击之后会跳转到登录页面,但如果你在请求头携带 Cookie 访问,则得到对应内容,其中最重要的一个 Cookie 字段是 HWS_ID,测试代码如下,你可以从开发者工具中复制出对应的 Cookie 字段访问该页面。

import requests
from lxml import etreeheaders = {"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反爬相关推荐

  1. 大佬带你详解Python反爬虫措施以及爬虫编写注意事项

    Python爬虫开发:反爬虫措施以及爬虫编写注意事项 反爬虫的几重措施 1.IP限制 如果是个人编写的爬虫,IP可能是固定的,那么发现某个IP请求过于频繁并且短时间内访问大量的页面,有爬虫的嫌疑,作为 ...

  2. python爬虫常见反爬措施_爬虫常见的反爬措施有哪些

    爬虫常见的反爬措施有三种: 1.header头部信息 解决方法: 加User-Agent值: 如果不加header头,部分网站服务器判断不到用户的访问来源,所以会返回一个404错误来告知你是一个爬虫, ...

  3. 技术深扒丨没点想象力都看不透这个网站的反爬措施!

    所谓万物皆可爬,写一段Python代码,就能让程序自动进行网站访问.解析数据并保存下来,再进行下一步分析,这是一项很酷的技能. 当然各网站也有自己的反爬方式,比如判断用户IP在短时间内是否频繁访问对应 ...

  4. Python爬虫入门教程,突破煎蛋网反爬措施,妹子图批量抓取!

    今天写一个爬虫爱好者特别喜欢的网站煎蛋网 ,这个网站其实还是有点意思的,网站很多人写了N多的教程了,各种方式的都有,当然网站本身在爬虫爱好者的不断进攻下,也在不断的完善,反爬措施也很多,今天我用 se ...

  5. 针对淘宝反selenium的反反爬措施详讲1-----pyautogui

    现在某猫和某宝在反反selenium的道路上越越来恶毒了,大部分是检测webdriver的关键符(网上有很多介绍这里就不一一介绍了)当我们遇到反selenium那该怎么办??????????????? ...

  6. Python爬虫:爬取西刺代理数据,讲解处理反爬措施(上篇)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本文章来自腾讯云 作者:Python进阶者 想要学习Python?有问题得不到第一 ...

  7. 爬取拉钩 破解拉钩反爬机制

    破解拉钩反爬 实现爬取内容 拉钩的反爬很厉害 没毛病 老铁!! 我们现在来研究一下拉钩的请求头先 导入的有一个ip池(get_ip) ip池可以不写 用自己的也不会被封掉还有我是第一次写这些文章 给个 ...

  8. python爬虫之反爬虫情况下的煎蛋网图片爬取初步探索

    本次爬虫网址:http://jandan.net/ooxx 前言: 前段时间一直在折腾基于qqbot的QQ机器人,昨天用itchat在微信上也写了一个机器人,相比webqq,微信的web端功能比较丰富 ...

  9. pythonttf字体反爬虫_Python爬虫---汽车之家字体反爬

    本篇文章给大家带来的内容是关于Python爬虫---汽车之家字体反爬,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 目标网站:汽车之家 目标网址:https://club.autoh ...

最新文章

  1. 计算机组成原理1--原码、反码、补码、移码之间的关系
  2. 反思专注力:重视专注;转变认知;避开即时娱乐;控制专注;氛围想不专注都难
  3. javascript基础修炼(4)——UMD规范的代码推演
  4. redis延迟队列 实现_灵感来袭,基于Redis的分布式延迟队列
  5. 【先生】丘成桐:中国人可以做世界一流学者
  6. ef6 mysql_VS2015 + EF6连接MYSQL5.6
  7. android 图片分析,Android图片处理实例分析
  8. SAP屏幕设计器专题:表格控件属性的设定(七)
  9. java的null类型强转
  10. win10自动更新系统导致 点击睡眠之后直接关机
  11. 基于Transformer的时空融合网络地铁客流预测模型
  12. Faster R-CNN详解
  13. 影响ae渲染时间的计算机配置,分享两套影视后期电脑配置2019 能流畅使用ae和pr的电脑主机推荐...
  14. 坚定信念,雨后终会见彩虹
  15. 数据组,请求组,职责,用户关系
  16. 【JAVA】解决mapper绑定异常:nested exception is org.apache.ibatis.binding.BindingException:
  17. 计算机无法检索文件夹,win7系统不能搜索文件夹怎么回事
  18. 第十六次ScrumMeeting博客
  19. 对英雄难过美人关这个千古难题 高僧这样破解
  20. 你对明星直播带货有多少误解?

热门文章

  1. 科学院开放资源github_什么是开放科学?
  2. VSCode自定义代码片段10—— 数组的响应式方法
  3. Bootstrap3 滚动监听插件的调用方式
  4. es6 属性的可枚举性和遍历
  5. extras mibs php7,ubuntu编译安装php7遇到的问题及解决方案
  6. java电脑上运行_java-在本地计算机上运行的Web应用程序
  7. java node子节点_使用Java的XPath循环遍历节点并提取特定的子节点值
  8. 单载波DSP模块介绍
  9. python都可以开发什么_Python的优势到底是什么?Python都能开发什么?
  10. Django单表,连表查询