web数据采集核心技术分享系列(2):如何破解验证码?

优采云 发布时间: 2021-08-21 21:06

  web数据采集核心技术分享系列(2):如何破解验证码?

  目录:

  web data采集核心技术分享系列(一)做一个强大的web data采集系统,你需要什么?

  web data采集核心技术分享系列(二)如何提取信息?字符串?正则?Xpath?Xslt?自定义?...什么是王道?

  web data采集核心技术分享系列(三)如何破解验证码?图像分析?特征匹配?人工智能?第三方集成?...哪个最强大?

  web data采集核心技术分享系列(四)利用神经网络实现网页验证码破解

  应各位热心网友的要求,特建立QQ群:254764602,欢迎大家进群讨论,互相学习。

  请输入密码“data采集”加入群组,否则请勿添加

  写完文章破解验证码的文章后,有朋友在群里表示希望看到更深入的应用,所以今天就和家人一起讨论下如何使用神经网络来破解验证代码。看过上篇文章的朋友应该都知道,破解网页验证码有一个大致的流程,但是有两个难点。第一个是图像处理,第二个是特征匹配。如果您对这一点还不清楚,请先阅读。第一部分。

  好了,回到今天的话题。神经网络是人工智能的一个分支。原理上是利用模仿人脑神经元的结构和工作方式来实现逻辑处理。如果你不了解神经网络,你可能需要提前查找。一些文章,让你更好的理解这篇文章。对于神经网络,有几个关键点,大家一定要清楚:

  1.神经元的结构,这里是一张图

  

  它由具有许多树突(称为树突)和单个分支(称为轴突)的细胞体组成。树突可以接收来自其他神经元的信号。对于程序来说,相当于输入。当这些树突接收到的脉冲混合结果超过一定的阈值时,神经元就会被激发,向轴突产生脉冲(或尖峰)。轴突末端的分支形成与其他神经元连接的突触。相当于程序中的输出,突触是神经元之间的接触点;突触可分为兴奋型和抑制型,分别对应于将到达脉冲加入总信号或从总信号中减去该脉冲,神经网络是由许多神经元组成的网络

  2.Neural 网络结构,真正的神经网络是由很多神经元组成的。为了便于理解,我们来看一个非常简单的神经网络

  

  在这个图中,输入层、中间层、输出层都被赋予了一系列的数据,加载到输入层中,然后经过中间层的计算,在数据层得到数据结果关于如何编写神经网络,超出了本文的范围,网上也有一些开源库,有兴趣的同学可以研究一下他们的源码。本文以BrainNet.NeuralFramework库为例,重点介绍如何使用神经网络破解网页验证码。

  我将尝试以最接近程序员而非神经网络研究人员的方式解释一些应用主题。了解了神经网络之后,大家应该明白,神经网络能做什么就相当于一个函数。接受一组数据作为输入,输出一组数据作为输出。似乎他能帮到我们的很少。图像处理应该没有帮助。那么,对于特征匹配,我们来分析一下。当我们对一个验证码进行图片处理后(参考上一篇)我们得到一个图片数组,每张图片代表一个字符,一般大小是固定的,也可以通过缩放达到固定大小,这里假设一个16* 16张黑白图片,黑色为字符,白色为背景,那么这张图片中的每个点都可以用0或1来表示。假设1代表一个黑点,0代表一个白点,那么我们就可以对这张图片进行处理作为一个由0和1组成的字符串,这个字符串有多少位,我们在输入端,也就是输入层,需要有多少个神经元,每个单元接受一个0或者1作为输入参数,在输出端,假设我们认为一切都是数字,那么输出只能是0-9,即输出可以用二进制表示,比如0001-1001。到这里大家都明白了,我们在输出端需要4个单元。我们暂时不考虑。然后我们在输出的每个单元上得到一个0或1,组合起来就会得到一个0-9的数字,这样就完成了从一个字符图像到一个字符的特征匹配过程。是不是很简单?哈哈

  是时候看代码了,但还有一件事需要解释。神经网络不是天生就能识别数字的,就像人类不是天生就能识别数字一样。它能够捕获一组输入并转换一组输出。 ,所以我们需要像教孩子认识数字一样教他。这个过程就是训练。一般特征匹配基于预训练。那么训练是节目的神马?说白了就是告诉他这个输入组合对应那个输出组合的对应关系,这样当你给他同样的输入或者相似的输入,他就会给他同样或者相似的输出。

  边解释边看代码

  BackPropNetworkFactoryfactory=newBackPropNetworkFactory();

  ArrayListlayers=newArrayList();

  layers.Add(256);

  layers.Add(256);

  layers.Add(4);

  network=factory.CreateNetwork(layers);

  NetworkSerializerserializer=newNetworkSerializer();

  serializer.LoadNetwork(path,refnetwork);

  我们看到这个神经网络在输入层有 256 个单元,在中间层有 256 个单元,在输出层有 4 个单元。正如我之前所说,它可以识别 0-9 的数字。

  INeuralNetworknetwork=BrazilNeuralNet.GetInstance();

  ImageProcessingHelperimgHelper=newImageProcessingHelper();

  ArrayListinputArray=imgHelper.ArrayListFromImage(inputasImage);

  ArrayListoutputArray=network.RunNetwork(inputArray);

  PatternProcessingHelperpatternHelper=newPatternProcessingHelper();

  longnumber=patternHelper.NumberFromArraylist(outputArray);

  returnConvert.ToInt32(number).ToString();

  这段代码完全是实现了之前的想法。应该很容易理解。返回值就是我们想要的验证码字符。呵呵,是不是好像很容易,那你自己试试吧,对吧,新建一个吧,看来QQ群里有比我厉害的高手。请速加群,听他讲更高级的图像处理和神经网络算法。

  神经网络在网页数据验证码破解中的应用先到这里,我会根据大家的反馈再写一篇文章。欢迎大家交流

  本系列网络资料采集Core Technology Sharing 重点分享思想。所有的代码都是为了解释想法。如果你想关注如何打造一个完整的童鞋采集系统,别着急,关注。关于这个话题,我不想关注想法,我只想复制代码,运行F5,然后单击鼠标捕获数据。请理解。

  PS:由于本人能力有限,虽然在web data采集领域奋斗了多年,但无法在web data采集的各个方面提供最强大的解决方案和思路。还请看官。在相互交流和学习的态度上批评和纠正,共同进步和成长。欢迎留言。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线