解决方案:网站用于识别网络抓取机器人的常用方法

优采云 发布时间: 2022-11-05 08:24

  解决方案:网站用于识别网络抓取机器人的常用方法

  今天网站会设置一系列的反爬策略,一般都是通过代理来解决的。本文将重点介绍网站如何识别您的机器人并将其与真实用户区分开来。

  网站识别网络爬虫的常用方法如下:

  

  1.当大量请求从单个IP发送到一个URL时,就认为是来自bot。

  2、如果网站的服务器检测到你的真实IP地址,网站可以检测到机器人的使用。

  3.当发送到网站服务器的请求有不同的不相关的属性时。

  4.当检测到可疑的浏览器配置时,网站可以将其链接到bot使用并阻止IP。

  

  5. 在没有 cookie 的情况下连接到 网站 是可疑的,并且指向 bot 的使用。

  6. 网站还要注意网页上的非人类行为。机器人难以模拟鼠标和键盘动作,并且很容易被检测到。

  识别网络抓取中的机器人活动是 网站 对您的第一反应。在他们怀疑您的活动后,他们可以通过多种方式做出回应,包括跟踪您、向您显示错误页面或向您提供虚假数据。您最终可能会被阻止访问该网站。

  通用解决方案:网页抽取技术和算法

  基于机器学习的网页提取

  基于常规或 CSS 选择器(或 xpath)的网页提取是基于基于包装器的网页提取。这种提取算法的共同问题是必须针对不同结构的网页制定不同的提取规则。如果一个舆情系统需要监控10000个异构网站s,它需要编写和维护10000组抽取规则。大约从 2000 年开始,人们一直在研究如何使用机器学习来让程序从网页中提取所需的信息,而无需手动规则。

  从目前的科研成果来看,基于机器学习的网页提取重点偏向于新闻网页内容的自动提取,即当输入一个新闻网页时,程序可以自动输出新闻标题,文字、时间等信息。新闻、博客、百科网站收录比较简单的结构化数据,基本满足{title,time,text}的结构,提取目标很明确,机器学习算法设计的很好。但是,电子商务、求职等各类网页所收录的结构化数据非常复杂,有的存在嵌套,没有统一的提取目标。很难为此类页面设计机器学习提取算法。

  本节主要介绍如何设计一种机器学习算法,从新闻、博客、百科全书等中提取文本信息。网站,以下简称网页内容提取(Content Extraction)。

  基于机器学习的网页提取算法大致可以分为以下几类:

  基于启发式规则和无监督学习的网页提取算法

  基于分类器的网页提取算法

  基于网页模板自动生成的网页提取算法

  三类算法中,第一类算法实现最好,效果最好。

  下面简单介绍一下这三种算法。如果你只是想在你的工程中使用这些算法,你只需要了解第一类算法。

  下面会提到一些论文,但是请不要根据论文中自己的实验数据来判断算法的好坏。很多算法都是面向早期网页设计的(即以表格为框架的网页),有些算法有实验数据集,覆盖范围更广。狭窄。有条件的话最好自己评估一下这些算法。

  1. 基于启发式规则和无监督学习的网页提取算法

  基于启发式规则和无监督学习的网页提取算法(第一类算法)是目前最简单、最有效的方法。并且通用性高,即该算法往往对不同语言、不同结构的网页有效。

  这些早期的算法大多没有将网页解析成DOM树,而是将网页解析成一系列token,例如下面的html源码:

  广告...(8个字符)

  身体...(500字)

  页脚...(6个字)

  该程序将其转换为一系列标记:

  label(body), label(div), text, text....(8 次), label(/div), label(div), text, text...(500 次), label(/div), label(div), text, text...(6 次), label(/div), label(/body)

  早期有基于token序列的MSS算法(Maximum Subsequence Segmentation)。该算法有多个版本。一个版本为令牌序列中的每个令牌分配了一个分数。评分规则如下:

  

  一个标签给出-3.25分

  1分文字

  根据评分规则和上面的token序列,我们可以得到一个评分序列:

  -3.25,-3.25,1,1,1...(8 次),-3.25,-3.25,1,1,1...(500 次),-3.25,-3.25,1,1,1。..(6 次),-3.25,-3.25

  MSS算法认为,如果在token序列中找到一个子序列,使得该子序列中token对应的score之和达到最大值,那么这个子序列就是网页的文本。换个角度理解这个规则,就是从html源字符串中找一个子序列。这个子序列应该收录尽可能多的文本和尽可能少的标签,因为该算法会为标签分配更大的绝对值。负分 (-3.25),给文本一个小的正分 (1)。

  如何从分数序列中找到和最大的子序列可以通过动态规划很好地解决。详细的算法这里就不给出了。有兴趣的可以参考论文《Extracting Article Text from the Web with Maximum Subsequence Segmentation》,MSS 算法效果不好,但是这篇论文认为它是很多早期算法的代表。

  还有其他版本的 MSS,我们上面说过算法分别给标签和文本分配 -3.25 和 1 点,它们是固定值,并且有一个版本的 MSS(也在论文中)使用朴素贝叶斯作为标签和文本。文本计算分数。虽然这个版本的MSS效果有了一定程度的提升,但还是不够理想。

  无监督学习在第一类算法中也扮演着重要的角色。许多算法使用聚类方法将网页的文本和非文本自动分为两类。例如,在“CETR - Content Extraction via Tag Ratios”算法中,网页被分成多行文本,算法为每行文本计算2个特征,分别是下图中的横轴和纵轴,以及红色椭圆中的单元格。(行),其中大部分是网页,绿色椭圆中收录的大部分单元(行)是非文本。使用 k-means 等聚类方法,可以很好地将文本和非文本分为两类。然后设计一些启发式算法来区分这两种类型中哪些是文本,哪些是非文本。

  早期的算法经常使用记号序列和字符序列作为计算特征的单位。从某种意义上说,这破坏了网页的结构,没有充分利用网页的特性。在后来的算法中,很多使用 DOM 树节点作为特征计算的基本单元,例如“通过路径比率提取 Web 新闻”、“通过文本密度提取基于 Dom 的内容”,这些算法仍然使用启发式规则和无监督学习,因为DOM树的节点作为特征计算的基本单元,算法可以获得更好更多的特征,因此可以设计出更好的启发式规则和无监督学习算法。通常比前面描述的算法要高得多。由于提取时以DOM树的Node为单位,

  我们在WebCollector(1.12版本开始)中实现了一流的算法,可以直接从官网下载源代码使用。

  2.基于分类器的网页抽取算法(第二类机器学习抽取算法)

  实现基于分类器的网页提取算法(第二种算法),一般流程如下:

  找到数千个网页作为训练集,手动标注文本和非文本(即需要提取的部分和不需要提取的部分)。

  设计特点。例如,一些算法将 DOM 树的标签类型(div、p、body 等)作为特征之一(当然这是一个已弃用的特征)。

  选择合适的分类器并使用这些特征进行训练。

  对于网页提取来说,特征设计是第一要务,使用什么分类器有时并不那么重要。在使用相同特征的情况下,使用决策树、SVM、神经网络等不同的分类器,不一定对提取效果有太大影响。

  从工程的角度来看,该过程的第一步和第二步都比较困难。训练集的选择也很讲究,保证所选数据集中网页结构的多样性。比如现在比较流行的文本结构是:

  xxxx

  xxxxxxxx

  xxx

  

  xxxxx

  xxxx

  如果训练集中只有五六个网站页面,很有可能这些网站的文本都是上面的结构,而仅仅在特征设计上,有两个特征:

  节点标签类型(div、p、body 等)

  子节点标签类型的频率(即子节点中有多少个div,多少个p...)

  假设使用决策树作为分类器,最终训练出来的模型很可能是:

  如果一个节点的标签类型为div,且其子节点中标签为p的节点超过3个,则该节点对应网页的body

  虽然这个模型可以在训练数据集上取得更好的提取效果,但是很明显有很多网站不符合这个规则。因此,训练集的选择对提取算法的效果影响很大。

  网页设计的风格在不断变化。早期的网页经常使用表格来构建整个网页的框架。现在的网页都喜欢用div来搭建网页的框架。如果希望提取算法覆盖较长的时间,那么在设计特征时应该尽量使用那些不易改变的特征。标签类型是一个很容易改变的特征,并且随着网页设计风格的变化而变化,所以如前所述,强烈不建议使用标签类型作为训练特征。

  上面提到的基于分类器的网页提取算法属于急切学习,即算法通过训练集生成模型(如决策树模型、神经网络模型等)。对应的惰性学习,也就是不预先使用训练集就生成模型的算法,比较有名的KNN属于惰性学习。

  有些提取算法使用KNN来选择提取算法,听上去可能有点混乱,这里解释一下。假设有2个提取算法A和B,有3个网站site1,site2,site3。2种算法对3个网站的提取效果(这里使用0%到100%之间的数字表示,越大越好)如下:

  网站 算法A的提取效果 算法B的提取效果

  站点 1 90% 70%

  站点 2 80% 85%

  站点 3 60% 87%

  可以看出,在site1上,算法A的提取效果优于B,在site2和site3上,算法B的提取效果更好。在实践中,这种情况非常普遍。所以有人想设计一个分类器,这个分类器不是用来对文本和非文本进行分类,而是帮助选择提取算法。例如,在这个例子中,当我们提取site1中的网页时,分类器应该告诉我们使用A算法以获得更好的结果。

  举个直观的例子,算法A对政府网站的提取效果更好,算法B对网络新闻网站的提取效果更好。那么当我提取政府类网站时,分类器应该会帮我选择A算法。

  这个分类器的实现可以使用KNN算法。需要提前准备一个数据集。数据集中有多个站点的网页,需要同时维护一个表。哪种算法提取最好的结果)。当遇到要提取的网页时,我们将该网页与数据集中的所有网页进行比较(效率低下),找到最相似的K个网页,然后查看K个网页中哪个站点的网页最多(例如k= 7,其中6个来自CSDN News),那么我们选择本站最好的算法来提取这个未知网页。

  3.基于网页模板自动生成的网页提取算法

  基于网页模板自动生成的网页提取算法(第三类算法)有很多种。这是一个例子。在“URL Tree: Efficient Unsupervised Content Extraction from Streams of Web Documents”中,比较相同结构的多个页面(以URL判断),找出异同。页面之间的共同部分是非文本的,页面之间的差异很大。部分可能是文本。这很容易理解。例如,在某些网站 页面中,所有页脚都相同,即归档信息或版权声明。这是页面之间的共性,所以算法认为这部分是非文本的。不同网页的文本往往是不同的,因此算法更容易识别文本页面。该算法往往不会从单个网页中提取文本,而是在采集大量同构网页后同时提取多个网页。也就是说,不需要实时输入网页并提取。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线