反爬虫之信息校验反爬虫

服务器端通过校验请求头或者请求正文中特定的信息,用以区分正常用户和爬虫程序

1.User-Agent反爬虫

这是一种较为初级的判断方法,以下简称ua:

  User-Agent就是请求头域之一,服务器能够从 User-Agent对应的值中识别客户端使用的操作系统CPU类型、浏览器、浏览器引擎、操作系统语言等。浏览器 User-Agent头域值的格式为: 

    浏览器标识 (操作系统标识;加密等级标识:浏览器语言)      渲染引擎标识     版本信息  

    如Chrome和Firefox:

      Chrome:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36

      Firefox:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0

    对比两个浏览器的User-Agent 值可以发现,它们的浏览器标识头都是Mozilla,操作系统标识相近,但渲染引擎、浏览器版本和厂商不同。服务器正是通过这些差异来区分客户端身份的。

    在网络请求中,User-Agent是客户端用于表明身份的一种标识,服务器通常通过该头域的值来】断各户端的类型。要注意的是,User-Agent头域并非不可缺少,而且它的值可以被更改。

  之所以选择 User-Agent头域作为校验对象,是因为很多编程语言和软件有默认的标识、在发起网络请求的时候,这个标识会作为请求头参数中的User-Agent头域值被发送到服务器。比如使用Python中的Requests 库向服务器发起 HTTP请求时,服务器读取的 User-Agent 值为:

    ?python-requests/2.21.0

  便用Java和 PHP等语言编写的库也常设置有默认的标识,但并不是全都有,这跟开发者有安注意的是,HTTP协议并未强制要求请求头的格式.

既然客户端发起造求时会将UserAent发送给服务器端,那么我们只需要在服务器端对User-A头域值进行校验即可,校验流程如图4-5所示。客户端标识种类繁多,如何有效区分呢?这就需要田到黑名单策略了。

  名单是包含事物名称的清单,而黑名单则是用来记录那些不符合要求的事物名称的清单。我们可以将非正常客户端的关键字加入黑名单中,利用 nginx的条件判断语句实现反爬虫。比如将Python、Java 和 PHP等关键词加人黑名单,那么只要服务器检测到 User-Agent头域值中包含黑名单中的关键词时、就会将此次请求的发起者视为爬虫,可以不予处理或者返回相应的错误提示

除了User-Agent 之外,常见的用于反爬虫的头域还有Host 和Referer。这种验证请求头信息中特定头的方式既可以有效地屏蔽长期无人维护的爬虫程序,也可以将一些爬虫初学者发起的网络请求拒之外,但是对于一些经验丰富的爬虫工程师,或许还需要更巧妙的反爬虫手段

原文地址:https://www.cnblogs.com/codexlx/p/12556341.html

时间: 2024-07-29 07:39:30

反爬虫之信息校验反爬虫的相关文章

Requests爬虫和scrapy框架多线程爬虫

1.基于Requests和BeautifulSoup的单线程爬虫 1.1 BeautifulSoup用法总结 1. find,获取匹配的第一个标签 tag = soup.find('a') print(tag) tag = soup.find(name='a', attrs={'class': 'sister'}, recursive=True, text='Lacie') tag = soup.find(name='a', class_='sister', recursive=True, te

php爬虫抓取信息及反爬虫相关

58爬虫了百姓,赶集和58互爬,最后各种信息相同,都是爬虫后的数据库调用,潜规则啊,几家独大还暗中各种攻击,赶驴网的幽默事例我不想多评价.这个时代是砸.钱*养.钱的时代,各种姚晨杨幂葛优,各种地铁公车广告,各种卫视广告,铺天盖地~~~ 来谈php爬虫抓取信息~~ php爬虫首推Curl函数了,先来认识下它. 0x01.curl扩展的安装: 1.确保php子文件夹ext里面有php_curl.dll(一般都有的,一般配置时候会设置环境变量的) 2.将php.ini里面的;extension=php

想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,这里可以为你解决。

全面超越Appium,使用Airtest超快速开发App爬虫 想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,使用 Airtest 开发 App 爬虫,只要人眼能看到,你就能抓到,最快只需要2分钟,兼容 Unity3D.Cocos2dx-*.Android 原生 App.iOS App.Windows Mobile……. Airtest是网易开发的手机UI界面自动化测试工具,它原本的目的是通过所见即所得,截图点击等等功能,简化手机App图形界面测试代码编写工作. 安

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

第三百三十四节,web爬虫讲解2-Scrapy框架爬虫-Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻标题和rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息 我们以百度新闻为列: 1.分析网站 首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息 然后查看源码,看看在源码里是否有

【java爬虫】---爬虫+基于接口的网络爬虫

爬虫+基于接口的网络爬虫 上一篇讲了[java爬虫]---爬虫+jsoup轻松爬博客,该方式有个很大的局限性,就是你通过jsoup爬虫只适合爬静态网页,所以只能爬当前页面的所有新闻.如果需要爬一个网 站所有信息,就得通过接口,通过改变参数反复调该网站的接口,爬到该网站的所有数据信息. 本博客以爬金色财经新闻信息为对象,去爬取该网站从建站以来发表的所有新闻信息.下面会一步一步讲解.这里重点重点讲思路,最后我会提供完整源码. 第一步:找接口 你要获得该网站所有新闻数据,第一步当然是获得接口,通过接口

爬虫相关之浅聊爬虫

1.安装:要是说到爬虫,我们不得不提一个大而全的爬虫组件/框架,这个框架就是scrapy:scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.那么我们直接进入正题,先说说这个框架的两种安装方式: 第一种:windows环境下的安装需要以下几步操作 1.下载twisted:http://www.lfd.uci.edu/~gohlke/pythonlibs/ 2.pip3 install wheel 3.pip3 ins

爬虫学习 04.Python网络爬虫之requests模块(1)

爬虫学习 04.Python网络爬虫之requests模块(1) 引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档症.抑郁.头疼.甚至死亡. 今日概要 基于requests的get请求 基于requests模块的post请求 基于requests模块ajax的get请求 基于requests模块ajax的post请求 综合项目练习:爬取国家药品监

爬虫学习 06.Python网络爬虫之requests模块(2)

爬虫学习 06.Python网络爬虫之requests模块(2) 今日内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 知识点回顾 xpath的解析流程 bs4的解析流程 常用xpath表达式 常用bs4解析方法 了解cookie和session - 无状态的http协议 如上图所示,HTTP协议 是无状态的协议,用户浏览服务器上的内容,只需要发送页面请求,服务器返回内容.对于服务器来说,并不关心,也并不知道是哪个用户的请求.对于一般浏览性的网页来说

Python_01_IP代理池_实现代理池的爬虫模块的及具体爬虫

目标:通过继承通用爬虫,实现多个具体爬虫,分别从各个免费代理ip网站上抓取代理ip 步骤 1.实现西刺代理,ip3366代理和快代理还有proxylistplus代理 定义一个类,继承通用爬虫类 提供urls,group_xpath和detail_xpath 2.实现66ip爬虫 定义一个类,继承通用爬虫类 提供urls,group_xpath和detail_xpath 由于ip66网页进行js+cookie反爬,需要重写父类的get_page_from_url()方法 代码: import t