- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每周运行 IIS 7 几次,我看到来自一个地理位置的 Google Analytics(分析)上的大量点击。他们正在查看的网址序列显然是由某种算法生成的,所以我知道我正在被抓取内容。有什么办法可以防止这种情况发生吗?很沮丧,谷歌不只是给我一个 IP。
最佳答案
反刮削世界中有很多技术。我只是将它们分类。如果您发现我的答案中缺少某些内容,请发表评论。
A. 基于web请求的服务器端过滤
1. 阻止可疑 IP 或 IP。
阻止可疑 IP 的效果很好,但今天大部分抓取都是使用 IP 代理完成的,因此从长远来看,它不会有效。在您的情况下,您会收到来自相同 IP 地理位置的请求,因此,如果您禁止该 IP,则抓取工具肯定会利用 IP 代理,从而保持 IP 独立且不被检测到。
2.使用DNS级别过滤
使用 DNS 防火墙属于防刮措施。简而言之,这是将您的 Web 服务设置为专用域名服务器 (DNS) 网络,该网络将过滤并防止错误请求到达您的服务器。一些公司为复杂的网站保护提供了这种复杂的措施,您可能会更深入地查看 an example这样的服务。
3.有自定义脚本来跟踪用户的统计和丢弃麻烦的请求
正如您所提到的,您已经检测到爬虫抓取网址的算法。有一个自定义脚本来跟踪请求 url 并基于此开启保护措施。为此,您必须在 IIS 中激活 [shell] 脚本。副作用可能是系统响应时间会增加,从而减慢您的服务。顺便说一句,您检测到的算法可能会改变,从而关闭此措施。
4.限制请求频率
您可以设置请求频率或可下载数据量的限制。考虑到普通用户的可用性,必须应用这些限制。与抓取工具的持续请求相比,您可能会设置 Web 服务规则以丢弃或延迟不需要的事件。然而,如果爬虫被重新配置以模仿常见的用户行为(通过一些当今著名的工具:Selenuim、Mechanize、iMacros),此措施将失败。
5.设置最大 session 长度
这种措施是一个很好的措施,但通常现代抓取工具会执行 session 身份验证,因此切断 session 时间并不是那么有效。
B. 基于浏览器的识别和预防
1.为目标页面设置验证码
这是旧时代的技术,在大多数情况下确实解决了抓取问题。然而,如果你的抓取对手利用 anti-captcha services 中的任何一个这种保护很可能会关闭。
2. 将 JavaScript 逻辑注入(inject)到 Web 服务响应中
JavaScript 代码应该在请求的 html 内容之前或与请求的 html 内容一起到达客户端(用户的浏览器或抓取服务器)。此代码用于计数并将某个值返回给目标服务器。基于此测试,html 代码可能格式错误,甚至可能未发送给请求者,从而使恶意抓取工具无法使用。逻辑可能放在一个或多个 JavaScript 可加载文件中。此 JavaScript 逻辑可能不仅适用于整个内容,也可能仅适用于网站内容的某些部分(例如价格)。为了绕过这个措施,爬虫可能需要转向甚至 more complex scraping logic (通常是 JavaScript)是高度可定制的,因此成本很高。
C. 基于内容的保护
1.将重要数据伪装成图像
这种内容保护方法今天被广泛使用。它确实可以防止爬虫收集数据。它的副作用是隐藏为图像的数据被搜索引擎索引,从而降低了网站的 SEO。如果爬虫利用 OCR系统这种保护又可能被绕过。
2.频繁的页面结构变化
这是非常有效的抓取保护方法。它不仅可以更改元素 id 和类,还可以更改整个层次结构。后者涉及样式重组,因此会增加额外成本。当然,如果要保持内容抓取,抓取端必须适应新的结构。如果您的服务负担得起,则不会产生太大的副作用。
关于iis-7 - 我被刮了,我该如何防止这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28995620/
我尝试通过 Goutte 列表从流行的拍卖网络服务中抓取,但它们的部分代码是由 javascript 呈现的,问题是 Goutte 只返回没有 JS 作业的 DOM。因此,如果 symphony 是
我遇到了旧的工作代码无法正常运行的问题。 我的 python 代码正在使用漂亮的汤抓取网站并提取事件数据(日期、事件、链接)。 我的代码正在提取位于 tbody 中的所有事件.每个事件都存储在 中.
所以我期待着对这个 link 中出现的表格进行抓取. 为了抓取,我决定使用 Selenium 。 在我的第一次尝试中,我所做的是: driver = webdriver.Chrome(ChromeDr
所以我期待着对这个 link 中出现的表格进行抓取. 为了抓取,我决定使用 Selenium 。 在我的第一次尝试中,我所做的是: driver = webdriver.Chrome(ChromeDr
我通过 Selenium 运行 headless (PhantomJS) 浏览器的网站有不同的时区,所以我得到了很多条目的错误日期。因此,我抓取的结果显示了错误的日期/时间(我在美国东部时间,看起来网
尝试使用 beautiful soup 从网站上抓取表格以解析数据。我将如何通过它的标题来解析它?到目前为止,我什至无法打印整个表格。提前致谢。 代码如下: import urllib2 from b
我一直在使用 Selenium(Python Webdriver)抓取一个网站。当我尝试将它作为 click() 选项时,我收到了权限被拒绝的错误。完整堆栈跟踪: Traceback (most re
使用 Beautiful soup 和 Pandas 抓取网页以获取表格。其中一列有一些网址。当我将 html 传递给 pandas 时,href 丢失了。 有没有办法只为该列保留 url 链接? 示
我正在尝试抓取 table进入数据框。我的尝试仅返回表名称,而不返回每个区域的行内的数据。 这是我到目前为止所拥有的: from bs4 import BeautifulSoup as bs4 imp
我是一名优秀的程序员,十分优秀!