首页天道酬勤Python 反爬虫文本混淆反爬虫,python爬虫反反爬

Python 反爬虫文本混淆反爬虫,python爬虫反反爬

admin 08-29 00:37 413次浏览
文中案例参考 GitHub项目 4 文本混淆反爬虫 4.1 图片伪装为文字反爬虫 有些文字内容实际是图片伪装的提取图片的内容(图片请求响应结果res.content就是图片的字节数据,可以直接write为图片对象,也可以打开为图片对象,看案例)图片对象使用光学字符识别技术(pytesseract库)从图片中提取文字PyTesseract缺点:只能识别出一些清晰工整的图像中的文字,扭曲的文字或者有其它颜色图片干扰信息时候识别不准确参考案例001(02文件夹中) 4.2 CSS偏移反爬虫 一般用于数字显示,源码中有很多数字,用于混淆网页中显示的出来的内容的位置是固定的,源码中的数字进行偏移覆盖才是最终显示出来的数字去哪儿网的航班票价就是进行CSS偏移处理过的前面有数字120 下面有数字002002通过不同的左右偏移位置覆盖在120的数字上才是最终显示结果参考图片002 4.3 SVG图形映射反爬虫 SVG是一种二维矢量图形格式,放大缩小清晰度保持不变SVG映射反爬虫:前端或者后端里面将文字或者数字映射为对应SVG图形文件
网页源码中显示的是SVG图形文件,并没有实际的文字或者数字内容最常用于团购网站商家电话的替换映射替换有两种方式: 方式1:一个SVG图片代表一个数字或者文字。要显示内容的地方使用SVG图片替代,一般是设置class样式,然后设置背景图片,用SVG图片插到盒子中方式2:将所有的数字或者文字都放在一张SVG图片上,然后设置为背景图片,然后通过偏移图片的位置显示内容方式3:将所有的数字或者文字都放在一张SVG图片上,然后设置为背景图片,图片位置不同,SVG图片里面的的数字是可以通过改变xy轴坐标显示的位置的具体参考图书的P181页,关键是找到映射的规律 4.4 自定义网页字体(常用woff格式字体)反爬虫

自定义的字体格式:woff ttf eot otf

文中的数字使用自定义字体样式进行替代,查看元素数字都是显示的方框或者其它特殊符号

查看元素里面可以数字都有一个class样式,查看该class样式具体内容,只用一个font-family,对应的值就是自定义的字体样式

查看源码,数字是一些特殊编码,特殊编码就是字体文件里面定义的数字对应的编码

woff等字体文件请求的网址,可以下载字体文件到本地,然后使用

百度在线字体编辑打开查看:http://fontstore.baidu.com/static/editor/index.html

参考003图片

WOFF字体文件研究

WOFF(Web Open Font Format, web开放字体样式)是一种网页采用的字体格式标准本质上WOFF是基于SFNT字体,具有TrueType字体的结构,TrueType字体由网格上一系列的点进行描述,点是字体的最小单位WOFF文件等字体文件可以使用python中的第三方fonttools转换为XML文件,便于观察里面的具体数据pip install fonttools参考案例004打开XML文件,下面内容就是描述数字6的字形文件 TTGlyph里面有字形的名称、x和y轴坐标数据(可理解为字形的宽和高)contour里面只字形的轮廓信息,即多个点的坐标位置,就是这些点连接在一起构成一个字形 注意:相同的字形的宽高或者轮廓点可能会不一样,但是它们描述的会是一个字形
因此,只有起止坐标和点坐标数据完全一样的字形,我们才能肯定它们是相同的字符 <TTGlyph name="uniE339" xMin="0" yMin="-12" xMax="510" yMax="719"> <contour> <pt x="410" y="534" on="1"/> <pt x="398" y="586" on="0"/> <pt x="377" y="609" on="1"/> <pt x="341" y="646" on="0"/> <pt x="289" y="646" on="1"/> <pt x="247" y="646" on="0"/> <pt x="215" y="623" on="1"/> <pt x="173" y="592" on="0"/> <pt x="150" y="535" on="1"/> <pt x="138" y="506" on="0"/> <pt x="125" y="423" on="0"/> <pt x="125" y="369" on="1"/> <pt x="157" y="418" on="0"/> <pt x="248" y="464" on="0"/> <pt x="299" y="464" on="1"/> <pt x="386" y="464" on="0"/> <pt x="510" y="334" on="0"/> <pt x="510" y="232" on="1"/> <pt x="510" y="165" on="0"/> <pt x="452" y="49" on="0"/> <pt x="352" y="-12" on="0"/> <pt x="286" y="-12" on="1"/> <pt x="176" y="-12" on="0"/> <pt x="38" y="147" on="0"/> <pt x="38" y="335" on="1"/> <pt x="38" y="543" on="0"/> <pt x="114" y="637" on="1"/> <pt x="181" y="719" on="0"/> <pt x="294" y="719" on="1"/> <pt x="379" y="719" on="0"/> <pt x="433" y="671" on="1"/> <pt x="486" y="625" on="0"/> <pt x="498" y="541" on="1"/> </contour> <contour> <pt x="139" y="232" on="1"/> <pt x="139" y="188" on="0"/> <pt x="178" y="103" on="0"/> <pt x="247" y="60" on="0"/> <pt x="285" y="60" on="1"/> <pt x="339" y="60" on="0"/> <pt x="420" y="150" on="0"/> <pt x="420" y="227" on="1"/> <pt x="420" y="300" on="0"/> <pt x="341" y="387" on="0"/> <pt x="223" y="387" on="0"/> <pt x="139" y="301" on="0"/> </contour> <instructions/> </TTGlyph> 可以利用fonttools打开网页的字体文件进行分析 找出每个字符映射到网页源码中的代码,实现WOFF字形文件的映射文件但是如果开发者经常更换字体文件或者使用多套woff字体文件随机切换(只需要引用路径随机更换即可,网页源码使用了字体样式,字符代码就会自动更换)会使爬取难度越来越大 4.5 文本混淆爬虫通用解决方法 光学字符识别OCR可以是识别图形中的文字,但是WOFF字体文件和SVG图形中文字太多或者干扰因素多的时候就无法识别解决方法: 使用Python连接Splash渲染工具,进行网页所需部分的截图拿到截图后保存到本地使用PyTesseract库识别指定的图片该方法缺点:PyTesseract是一个开源库,识别率较低解决方法: 使用第三方文字识别API 腾讯云OCR识别(识别率高,但是要收费)https://cloud.tencent.com/act/event/ocrdemo 参考案例005及书中P202 5 特征识别爬虫

HTML文档对象 DOM

HTML文档对象DOM(Document Object Model)HTML DOM对象是对HTML文档所有元素进行访问的入口,这个入口就是文档对象模型,简称DOMDOM是W3C组织推荐的处理可扩展标志语言的标准编程接口DOM以面向对象的方式描述文档模型,定义了表示和修改文档所需要的对象的名称、对象的行为、对象的属性以及和对象之间的关系在网页中,组织页面或者文档对象被放在一个树形的结构中,其中用来表示对象的标准模型就是DOMHTML文档树形结构最顶层的对象就是documentDOM也可以理解为一个容器,EChats中绘图前都需要在网页中准备一个DOM容器对象

浏览器器对象 BOM

浏览器对象模型BOM(Browser Object Model)BOM对象是用来获取和操作浏览器的属性,主要对象有 window: 浏览器窗口对象,所有的JavaScript全局对象、函数和变量均自动成为该对象的成员window.navigator:访问者浏览器的相关信息window.location: 窗口当前显示的文档的web地址window.screen: 访问者浏览器的屏幕信息window.onload:HTML文档整体加载后,再执行window.onload里面的代码

详细DOM和BOM对象属性和方法查看图书P66-P69

5.1 Webdriver识别反爬虫 webdriver特征是可以修改的,不可靠参考案例006 5.2 浏览器特征 navigator.userAgent 浏览器器属性navigator.platform 用户计算机信息参考截图007_浏览器特征上面的浏览器特征也是和navigator.webdriver一样可以认为进行修改的,一样不可靠 5.3 爬虫特征

IP地址访问频率限制:使用IP池,分布式爬虫(多台机器轮流访问)

用户凭证(cookie或者token)和浏览器指纹限制:

web框架自带访问频率限制:登陆用户每天访问1000次,未登录每天100次web框架自带限速模块Throttling

用户凭证反爬虫:申请大量用户,访问时候随机携带cookie或token值,类似IP代理池

登录用户可靠凭证:cookie或token

未登录用户可靠凭证:

Canvas生成的指纹、WebGL生成的指纹、Navigator对象的属性值、客户端其它属性值,综合生成的特征值Fingerprint.js库可以生成一个重复率极低的特征指纹 5.4 隐藏连接反爬虫 隐藏连接反爬虫一般使用在大量列表中,将个别列表成员的css属性添加一个隐藏属性,display:none正常页面该盒子已被隐藏,用户浏览器访问不到,但是爬虫循环访问时候可以访问到后端设置访问该链接就被视为爬虫,然后将IP加入黑名单,实现了反爬隐藏式连接,利用的是爬虫工程师的粗细大意,仔细检查就可以避免访问隐藏式连接
C/C++函数指针怎么使用在React-Table中导出为PDF配置自定义DNS服务 容器云 UK8Slet和const的区别是什么基于springboot安全电子投票系统的设计与实现-计算机毕业设计源码+LW文档ACL规划已经操作指南
垃圾分类是怎么回事,尿液是黄的是怎么回事 classes是什么意思中文翻译怎么读,Classes怎么读?
相关内容