反爬虫

通过Headers反爬虫

从用户请求的Headers反爬虫是最常见的反爬虫策略。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。

如果遇到了这类反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。

基于用户行为反爬虫

例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作 使用IP代理就可以解决。

我们可以将代理IP检测之后保存在文件当中,但这种方法并不可取,代理IP失效的可能性很高,因此从专门的代理IP网站实时抓取,是个不错的选择。

可以在每次请求后随机间隔几秒再进行下一次请求。

基于动态页面的

通过开发者工具对网站流进行分析,找到单独的内容信息request(如Json),对内容信息进行抓取,获取所需内容。 对动态请求加密的,参数无法解析,也就无法进行抓取。这种情况下,可以通过Selenium 模拟 进行抓取。

页面使用了font-face定义了字符集,并通过unicode去映射展示

开发者模式中的字体无法显示 字体文件保存在本地通过 font creator 查看字体文件信息 通过fontTools库, 将字库文件转换成xml格式 映射关系与字体信息 ( 变化的是unicode映射 )

伪类元素隐藏式

把关键的厂商信息,做到了伪元素的content里。 这也是一种思路:爬取网页,必须得解析css,需要拿到伪元素的content。

正文中随机抽取某几个字使用span标签代替,标签内容位空,但css样式显示为所代替的文

通过抓包也没有抓到类似这样的css文件 ,这个css文件应该是利用js生成的 ,基本上就是拿各种关键词到各个js文件或者源代码中搜索

##验证码

  • 输入式验证码

只要识别出里面的内容,然后填入到输入框中即可。这种识别技术叫OCR,这里我们推荐使用Python的第三方库,tesserocr。对于没有什么背影影响的验证码如图2,直接通过这个库来识别就可以。但是对于有嘈杂的背景的验证码这种,直接识别识别率会很低,遇到这种我们就得需要先处理一下图片,先对图片进行灰度化,然后再进行二值化,再去识别,这样识别率会大大提高。

  • 滑动式验证码

模拟人去拖动验证码的行为,点击按钮,然后看到了缺口 的位置,最后把拼图拖到缺口位置处完成验证。 们可以比较两张图的像素,设置一个基准值,如果某个位置的差值超过了基准值,那我们就找到了这两张图片不一样的位置,当然我们是从那块拼图的右侧开始并且从左到右,找到第一个不一样的位置时就结束,这是的位置应该是缺口的left,所以我们使用selenium拖到这个位置即可 ,这里我们可以先找到这个标签,然后获取它的location和size

  • 点击式的图文验证 和 图标选择

只能借助第三方识别接口来识别出相同的内容,把验证码发过去,会返回相应的点击坐标。

然后再使用selenium模拟点击即可。

  • 宫格验证码

我觉得就好像暴力枚举,把所有出现的验证码保存下来,然后挑出不一样的验证码,按照拖动顺序命名,我们从左到右上下到下,设为1,2,3,4。上图的滑动顺序为4,3,2,1所以我们命名4_3_2_1.png,这里得手动搞。当验证码出现的时候,用我们保存的图片一一枚举,与出现这种比较像素,方法见上面。如果匹配上了,拖动顺序就为4,3,2,1。然后使用selenium模拟即可。

你可能感兴趣的:(爬虫)