在通过百度关键词搜索进行爬虫的过程中,会遇到进入百度安全验证页面的情况。随着访问次数的的增加,进入安全验证页面的概率也随之增大,且这种情况并不能通过请求头加入 Accept 和引入随机 UA 来解决(代理是否能解决这一问题未得到充分验证,以我的尝试来看并不能有效解决)。

在尝试过上述的几种方法来反“反爬”的过程中,发现一旦可以通过安全验证,在后续的爬虫过程中,可观察时间内并不会再次进入安全验证页面。既然“堵”不适合我解决这一问题,就只有利用“疏”的思路制定解决方案。

百度安全验证页面采用拖动滑块使页面中的图片角度为正确方向来判断是否为“自动程序”在控制浏览器。相较于一般的字符识别等验证方案具有一定的难度,直观表现在没有(或者几乎没有)现有的 API 供应商在提供这样的服务。

网络上现有的、基于图像处理或计算机视觉的解决方案主要分为传统方法和深度学习方法。传统方法通过对图像进行处理、建模来建立正确方向图像和不同角度图像的映射,再通过对图像进行哈希处理判定与页面上的图像最相似的图像,从而在映射关系中获得旋转角度。这种方法形成的“关系模型”会随着图库数量的增大而不断增大,且哈希编码来查找相似图像的方法鲁棒性较差。现有的基于深度学习的方法利用在 Google Street View dataset 训练的 RotNet 来预测图片旋转角度,经试验在类街景的测试图片上识别成功率较高。但由于缺乏百度安全验证页面中采用的人像、风景等多类样本,难以运用到实际使用中。除此以外,还有其他因素导致了利用该模型难以通过安全验证。

综上,在参考现有文章的基础上,总结出以下基于深度学习的方法:

目标:

识别图片角度,推算出对应滑动距离,模拟滑动。

实现:

  1. 获得原始图片数据集:循环访问百度搜索页面从而进入百度安全验证页面,抓取图片1500张,获得大量重复图片。对这些图片进行筛选,获得不重复图片144张(在前期实验的过程中发现安全验证页面易出现重复图片,推测用于验证的图片数据集规模较);


2. 制作数据集:生成各个角度的图片,每个不同的图片均有360张不同角度的照片,标记正向图,根据现有图片名称序列计算不同角度照片相对于正向图片的相对角度,重新命名从而建立数据集;

  1. 生成规则:根据滑动距离与图片旋转角度的关系形成滑动规则(按照滑动距离 o=angle×360×bo=angle \times 360 \times bo=angle×360×b 的规则来预测角度是不准确的,所以通过在安全验证页面逐单位距离滑动记录角度与滑动距离的关系);
  2. 模型训练:利用神经网络(考虑模型、数据集的大小以及模型的感受野)在数据集上进行训练,直接预测需要滑动的距离。由于百度安全验证的角度并不是整数变化的,滑动距离与角度的变化也不是一一对应的,因此相对于预测角度而言,直接预测滑动距离更加准确、便捷。且滑动距离的类别相比较于而言要少(也可以考虑做成回归任务),从而使得模型的参数也更少。此外,因为模型的目的是能足够准确地预测滑动距离,从而使得自动化程序模拟验证,因此,应该使得模型尽可能多地在现有数据集上学习。综上,考虑到真实场景的验证图片与获得的图片存在一定的差异(即使是相同的图片,也会受到不同程度的噪声干扰,如水印等),不再对数据集进行训练集与测试集的划分。

性能:

推理快、预测准(普遍最多在三次验证中可通过,根据实际操作和 b 站视频来看,人为通过安全验证的难度也相对较大)

操作

python 开发可以参考 https://github.com/ShortCJL/RotateCode
java 开发可先将训练获得的模型进行转化

import torch
import torchvision
import torch.nn as nnmodel = # instance of your model
model.load_state_dict(torch.load("your model.pth")["model_state_dict"])# Switch the model to eval model
model.eval()# An example input you would normally provide to your model's forward() method.
example = torch.rand(1, 3, 128, 128)# Use torch.jit.trace to generate a torch.jit.ScriptModule via tracing.
traced_script_module = torch.jit.trace(model, example)# Save the TorchScript model
traced_script_module.save("your model.pt")

之后,便可通过 DJL 加载模型并作出预测,并借助其他工具来操作浏览器实现验证(为不限制大家思路,在此不放出我的实现代码)。

代码

欢迎大家 star https://github.com/Tang1705/Baidu-Rot-Validate。

爬虫-百度安全验证-图片旋转验证-深度学习解决方案相关推荐

  1. python爬取百度图片(用于深度学习中数据集的收集)

    6_python爬取百度图片(用于深度学习中数据集的收集)(6-20181225-) 参考: https://blog.csdn.net/guyuealian/article/details/7873 ...

  2. zynq无法识别sd卡_百度米尔携手推出FZ3深度学习计算卡!

    前言:百度大脑是百度 AI 核心技术引擎,包括视觉.语音.自然语言处理.知识图谱.深度学习等AI核心技术和AI开放平台. 基于 Xilinx Zynq UltraScale+ MPSoC 的 Edge ...

  3. 过拟合和欠拟合_现代深度学习解决方案中的两大挑战:拟合和欠拟合

    全文共2306字,预计学习时长5分钟 对机器学习模型而言,最糟糕的两种情况无非是构建无用的知识体系,或是从训练数据集中一无所获.在机器学习理论中,这两种现象分别被称为过拟合和欠拟合,是现代深度学习解决 ...

  4. TEF(Tensorflow Extend Framework):大规模推荐系统深度学习解决方案

    背景 Tensorflow是目前使用最广泛的深度学习解决方案,但是在面对高维稀疏数据的场景(如广告,推荐,搜索等)下,有些力不从心,有以下几点缺点: 参数必须以固定维度的矩阵形式提前分配(训练开始前) ...

  5. 3月13日云栖精选夜读:通过阿里云容器服务深度学习解决方案上手Caffe+多GPU训练

    阿里云容器服务提供的深度学习解决方案内置了对Tensorflow, Keras, MXnet框架的环境,并支持基于它们的深度学习模型开发.模型训练和模型预测.同时,对于模型训练和预测,用户还可以通过指 ...

  6. 3月13日云栖精选夜读:通过阿里云容器服务深度学习解决方案上手Caffe+多GPU训练...

    阿里云容器服务提供的深度学习解决方案内置了对Tensorflow, Keras, MXnet框架的环境,并支持基于它们的深度学习模型开发.模型训练和模型预测.同时,对于模型训练和预测,用户还可以通过指 ...

  7. 百度CTO王海峰:深度学习如何大规模产业化?

    编者按:10月17日-19日,2019年中国计算机大会(CNCC2019)在苏州举办.百度首席技术官王海峰在会上发表题为<深度学习平台支撑产业智能化>的演讲,分享了百度关于深度学习技术推动 ...

  8. 捡漏!用谷歌图片搜索自制深度学习数据集 | 教程

    铜灵 编译整理 量子位 出品 | 公众号 QbitAI 就怕前脚刚立志搞个新研究,后脚就发现没有合适的数据集可用.AI工程师从入门到放弃,可能就是这么一会的功夫. 别找了,现在深度学习数据集也能自制了 ...

  9. 百度AI Studio飞桨平台 “深度学习”结课总结

    结课总结 2020.4.1-2020.4.8期间参加了百度AI Studio的"深度学习7日入门-CV疫情特辑"课程,这是今年自新冠疫情以来参加的第一次线上课程,偶尔通过paddl ...

最新文章

  1. rpm安装mysql图文
  2. jpa 根据主键生成策略获取id_如何在使用JPA和Hibernate时选择id生成策略
  3. 使用matlab内存不足,Matlab内存不足问题(Out of memory)
  4. IDEA快捷生成代码
  5. 【算法】剑指 Offer 04. 二维数组中的查找 【重刷】
  6. ES termQuery和matchQuery区别浅析
  7. 如何一个月减重20斤?
  8. Linux之父Linus Torvalds恶评Intel漏洞修复补丁:完全是个垃圾
  9. ubuntu14.04下python2.7推荐系统Crab搭建
  10. 【[TJOI2014]上升子序列】
  11. smtplib发送带附件的邮件
  12. android 自定义View【2】对话框取色色盘取色的实现
  13. linux下安装oracle客户端
  14. python查找列表中的重复值_在列表列表中查找重复项
  15. 联想台式计算机设置u盘启动不了,联想台式电脑bios设置u盘启动教程
  16. EclipseMaven导入Maven项目后在pom.xml出现Missing artifact org.springframework:spring-jdbc:jar:3.2.4.RELEAS
  17. html手机截屏保存不了,华为手机截屏图像保存不了怎么处理?
  18. xp系统计算机启动时灰色界面,XP系统任务管理器是灰色的打不开怎么办
  19. 贝尔曼算法队列优化(SPFA)
  20. 如何使用“迁移助理”将文件从旧 Mac 移到新Mac?

热门文章

  1. automagica 调用迅雷批量下载美剧
  2. 学习信号量 sem_init、sem_destroy、sem_post、sem_wait、sem_trywait、sem_getvalue
  3. 安装RabbitMQ出现Plugin configuration unchanged.问题
  4. JS中apply与call的用法
  5. 复杂性研究简介——从西蒙到霍兰
  6. Nexus 6p 刷入TWRP和OPENGAPPS
  7. mac数字键盘错乱_苹果手机数字键盘 苹果电脑键盘打不出数字解决办法
  8. 实力验证—— 热璞数据库以卓越的产品性能成为首批通过信通院金融数据库性能测评厂商
  9. DS18B20的CRC验证算法
  10. 迁移操作系统:如何把系统迁移到固态硬盘SSD?