31

继我关于屏幕抓取合法性的问题之后,即使它是非法的,人们仍然会尝试,所以:

可以采用哪些技术机制来防止或至少抑制屏幕刮擦?

哦,只是为了笑容和让生活变得困难,保留搜索引擎的访问权限可能会很好。我很可能在这里扮演魔鬼的拥护者,但有一个严重的潜在问题。

4

21 回答 21

62

你无法阻止它。

于 2008-12-28T23:04:14.640 回答
22

我在这里写了一篇关于这个的博客文章:http: //blog.screen-scraper.com/2009/08/17/further-thoughts-on-hindering-screen-scraping/

转述:

如果您在互联网上发布信息有人可以得到它,这只是他们想要投入多少资源的问题。提高所需资源的一些方法是:

图灵测试

Turning Test 最常见的实现是旧的 CAPTCHA,它试图确保人类阅读图像中的文本,并将其输入到表单中。

我们发现大量网站实施了非常弱的验证码,只需几分钟即可完成。另一方面,有一些非常好的图灵测试实现,我们会选择不处理,但复杂的 OCR 有时可以克服这些,或者许多公告板垃圾邮件发送者有一些巧妙的技巧来克服这些。

数据作为图像

有时您知道数据的哪些部分是有价值的。在这种情况下,将此类文本替换为图像是合理的。与图灵测试一样,有可以读取它的 OCR 软件,我们没有理由不能保存图像并让其他人稍后读取。

然而,通常情况下,将数据列为没有文本替代的图像违反了美国残疾人法案 (ADA),并且可以通过拨打公司法律部门的几个电话来解决。

代码混淆

使用 JavaScript 函数之类的东西在页面上显示数据,尽管它不在 HTML 源代码中的任何位置,这是一个很好的技巧。其他示例包括通过页面放置多产的、无关的评论或拥有以不可预知的方式排序的交互式页面(以及我认为使用 CSS 使显示相同的示例,无论代码的排列方式如何。)

CSS 精灵

最近我们遇到了一些情况,其中一个页面有一个包含数字和字母的图像,并且使用 CSS 只显示他们想要的字符。这实际上是前两种方法的组合。首先,我们必须获取主图像并读取那里的字符,然后我们需要读取站点中的 CSS 并确定每个标签指向的字符。

虽然这非常聪明,但我怀疑这也会与 ADA 发生冲突,尽管我还没有测试过。

限制搜索结果

我们想要获取的大部分数据都以某种形式存在。有些很容易,提交空白表格将产生所有结果。有些需要在表格中加上星号或百分比。最难的是那些每次查询只会给你这么多结果的那些。有时我们只是创建一个循环,将字母表中的字母提交到表单,但如果这太笼统,我们必须创建一个循环来提交所有 2 或 3 个字母的组合——即 17,576 个页面请求。

IP过滤

有时,勤奋的网站管理员会注意到来自特定 IP 地址的大量页面请求,并阻止来自该域的请求。但是,有许多方法可以通过备用域传递请求,因此这种方法通常不是很有效。

网站修修补补

抓取总是在 HTML 中删除某些内容。一些网站拥有不断调整其 HTML 的资源,以便任何刮擦都不断过时。因此,为不断变化的条件不断更新刮擦变得不划算。

于 2009-08-27T17:11:43.477 回答
20

因此,一种方法是混淆代码(rot13 或其他东西),然后在页面中添加一些 javascript 来执行类似 document.write(unobfuscate(obfuscated_pa​​ge)) 的操作。但这完全摧毁了搜索引擎(可能!)。

当然,这实际上也不能阻止想要窃取您数据的人,但它确实使事情变得更加困难。

一旦客户端有了数据,游戏就结束了,所以你需要在服务器端查看一些东西。

鉴于搜索引擎基本上是屏幕抓取工具,事情很困难。你需要看看好的屏幕刮板和的屏幕刮板有什么区别。当然,您也只有普通的人类用户。所以这归结为一个问题,你如何在服务器上有效地将请求分类为来自人类好的屏幕抓取工具或的屏幕抓取工具。

所以,开始的地方是查看你的日志文件,看看是否有一些模式可以让你有效地对请求进行分类,然后在确定模式后,看看是否有某种方式导致屏幕刮板了。分类,可以伪装成人类良好的屏幕刮板。

一些想法:

  • 您可能能够通过 IP 地址确定好的屏幕抓取工具..
  • 您可以通过并发连接数、每个时间段的连接总数、访问模式等来确定爬虫与人工。

显然,这些都不是理想的或万无一失的。另一种策略是确定您可以采取哪些对人类不显眼的措施,但(可能)对爬虫来说很烦人。一个例子可能是减慢请求的数量。(取决于请求的时间紧迫性。如果他们实时抓取,这将影响他们的最终用户)。

另一方面是着眼于更好地为这些用户服务。显然,他们正在抓取,因为他们想要数据。如果您为他们提供一种简单的方法,可以直接以有用的格式获取数据,那么他们将更容易做到这一点,而不是屏幕抓取。如果有一种简单的方法,那么可以规范对数据的访问。例如:给请求者一个唯一的key,然后限制每个key的请求数以避免服务器过载,或者每1000个请求收费等。

当然,仍然有人想要敲诈你,然后可能还有其他方法可以抑制,但他们可能开始变得非技术性,并且需要说服法律途径。

于 2008-12-29T13:05:53.910 回答
11

防止屏幕抓取非常困难,但如果您真的非常想要,您可以经常更改您的 HTML 或经常更改 HTML 标记名称。大多数屏幕抓取工具通过使用与标签名称的字符串比较或搜索特定字符串等的正则表达式来工作。如果您正在更改底层 HTML,它将使他们需要更改他们的软件。

于 2008-12-28T23:54:35.567 回答
5

这将是非常难以预防的。问题是网页是程序(您的浏览器)解析的,因此它们非常容易被抓取。您能做的最好的事情就是保持警惕,如果您发现您的网站被抓取,请阻止违规程序的 IP。

于 2008-12-28T23:07:24.133 回答
4

根据定义,搜索引擎是屏幕抓取工具。因此,您所做的大多数使屏幕抓取变得更加困难的事情也会使索引您的内容变得更加困难。

表现良好的机器人会尊重您的 robots.txt 文件。您还可以阻止已知罪犯的 IP,或者在内容未发送给已知良好的机器人时将混淆的 HTML 标记添加到您的内容中。虽然这是一场失败的战斗。我推荐已知罪犯的诉讼途径。

您还可以在内容中隐藏识别数据,以便更轻松地追踪犯罪者。众所周知,百科全书会添加虚构条目以帮助检测和起诉版权侵权者。

于 2008-12-28T23:48:16.093 回答
4

不要阻止它,发现它并报复那些尝试的人。

例如,让您的网站保持开放以供下载,但传播一些理智的用户不会关注的链接。如果有人点击该链接,对于人类或其他可疑行为来说点击太快,请立即做出反应以阻止用户尝试。如果有登录系统,请阻止用户并就不可接受的行为与他联系。这应该确保他们不会再试一次。如果没有登录系统,而不是实际页面,则返回带有指向同一警告的虚假链接的大警告。

这确实适用于 Safari Bookshelf 之类的东西,其中用户复制粘贴一段代码或一章以邮寄给同事是可以的,而完全下载书籍是不可接受的。我很确定他们会检测到一些人何时尝试下载他们的书籍,阻止帐户并向罪魁祸首表明如果他再次尝试,他可能会遇到真正的麻烦。

打个非 IT 类比,如果机场安检只是让武器难以带上飞机,恐怖分子会想方设法偷偷溜过安检。但是,仅仅尝试就会让你陷入深深的麻烦,因此没有人会尝试并找到偷偷摸摸的方法。被抓到并受到惩罚的风险太高了。做同样的事情。如果可能的话。

于 2009-08-21T09:43:23.377 回答
3

防止?——不可能,但你可以让它变得更难。

抑制?-- 可能,但您不会喜欢答案:为感兴趣的各方提供批量数据导出。

从长远来看,如果您发布它,您所有的竞争对手都会拥有相同的数据,因此您需要其他方式来使您的网站多样化(例如更频繁地更新它,使其更快或更易于使用)。如今,即使是谷歌也在使用用户评论等抓取信息,你认为你能做些什么呢?起诉他们并从他们的索引中启动?

于 2008-12-28T23:21:14.450 回答
3

最好的投资回报可能是添加随机换行符和多个空格,因为大多数屏幕抓取工具从 HTML 作为文本而不是作为 XML 工作(因为大多数页面不解析为有效的 XML)。

浏览器会忽略空格,因此您的用户不会注意到

  Price : 1
  Price :    2
  Price\n:\n3

是不同的。(这来自我使用 AWK 抓取政府网站的经验)。

下一步是在随机元素周围添加标签以破坏 DOM。

于 2009-05-22T18:22:44.143 回答
2

一种方法是创建一个获取文本和位置的函数,然后服务器端为文本中的每个字符生成 x, y pos,以随机顺序生成包含字符的 div。生成一个 javascript,然后将每个 div 定位在屏幕上的正确位置。在屏幕上看起来不错,但在后面的代码中,如果您不通过 javascript 进行抓取,则没有真正的顺序来获取文本(可以在每个请求中动态更改)

工作量太大,可能会有很多怪癖,这取决于您在网站上的文字数量和用户界面的复杂程度以及其他内容。

于 2008-12-28T23:55:57.030 回答
1

鉴于任何网站的意图是发布(即公开)信息,我认为很少有人这样做。

  • 当然,您可以在登录后隐藏您的数据,但这是一个非常适合情境的解决方案。

  • 我见过的应用程序只会提供请求标头指示网络浏览器的内容(而不是说匿名或“雅加达”),但这很容易被欺骗,你会失去一些真正的人。

  • 然后,您可能会接受一些报废,但如果请求以过高的速率来自同一个 IP,则不提供内容会使他们的生活变得难以克服。这受制于没有完全覆盖,但更重要的是存在“AOL 问题”,即一个 IP 可以覆盖许多独特的人类用户。

最后两种技术还严重依赖于流量拦截技术,这是不可避免的性能和/或财务支出。

于 2008-12-28T23:07:54.960 回答
1

鉴于大多数网站都希望获得良好的搜索引擎排名,而搜索引擎是爬虫机器人,因此您可以做的事情并不多,这不会损害您的 SEO。

您可以创建一个完全加载 ajax 的网站或基于 Flash 的网站,这会使机器人更难,或者将所有内容隐藏在登录后面,这会使其更难,但是这些方法中的任何一种都会损害您的搜索排名并可能会惹恼你的用户,如果有人真的想要它,他们会找到方法的。

拥有无法被抓取的内容的唯一保证方法是不在网络上发布它。网络的本质是,当你把它放在那里时,它就在那里。

于 2008-12-28T23:19:25.077 回答
1

如果您想要保护的信息不多,您可以即时将其转换为图片。然后他们必须使用 OCR,这样可以更容易地抓取另一个站点而不是你的站点。

于 2008-12-28T23:59:23.297 回答
0

您可以检查访问您网站的客户的用户代理。一些第三方屏幕抓取程序有自己的用户代理,所以你可以阻止它。好的屏幕抓取工具会欺骗他们的用户代理,因此您将无法检测到它。如果您因为不想阻止合法用户而尝试阻止任何人,请小心:)

您可以期望的最好的结果是阻止人们使用不够聪明的屏幕抓取工具来更改他们的用户代理。

于 2008-12-28T23:08:53.287 回答
0

我曾尝试“筛选”一些 PDF 文件,却发现它们实际上是以半随机顺序将字符放入 PDF 中的。我猜 PDF 格式允许您为每个文本块指定一个位置,并且它们使用了非常小的块(小于一个单词)。我怀疑有问题的 PDF 并没有试图阻止屏幕刮擦,而是他们使用渲染引擎做了一些奇怪的事情。

我想知道你是否可以做这样的事情。

于 2008-12-28T23:12:36.043 回答
0

您可以将所有内容放在闪存中,但在大多数情况下,这会惹恼许多合法用户,包括我自己。它可以用于某些信息,例如股票价格或图表。

于 2008-12-28T23:13:17.727 回答
0

我怀疑没有好的方法可以做到这一点。

我想您可以通过一种机制运行您的所有内容,将文本转换为使用 CAPTCHA 样式字体和布局呈现的图像,但这会破坏 SEO 并惹恼您的用户。

于 2008-12-29T21:50:42.277 回答
0

好吧,在将内容从服务器推送到客户端之前,请删除所有 \r\n、\n、\t 并将所有内容替换为一个空格。现在您的 html 页面中有 1 行长。谷歌这样做。这将使其他人难以阅读您的 html 或 JavaScript。
然后您可以创建空标签并随机插入它们。遗嘱没有任何影响。
然后,您可以记录所有 IP 以及它们访问您网站的频率。如果您每次都看到一个准时到达,则将其标记为机器人并阻止它。
如果您希望搜索引擎进入,请确保不要理会它们。
希望这会有所帮助

于 2009-07-12T04:06:48.967 回答
0

使用iText 库从您的数据库信息中创建 PDF 怎么样?与 Flash 一样,它不会使抓取变得不可能,但可能会使它变得更加困难。

内尔斯

于 2010-01-15T18:55:55.973 回答
0

老问题,但是 - 添加交互性会使屏幕抓取变得更加困难。如果数据不在原始响应中——比如说,你在页面加载后发出了一个 AJAX 请求来填充一个 div——大多数抓取工具都不会看到它。

For example- I use the mechanize library to do my scraping. Mechanize doesn't execute Javascript- it isn't a modern browser- it just parses HTML, let's me follow links and extract text, etc. Whenever I run into a page that makes heavy use of Javascript, I choke- without a fully scripted browser (that supports the full gamut of Javascript) I'm stuck.

This is the same issue that makes automated testing of highly interactive web applications so difficult.

于 2010-07-09T20:24:51.773 回答
0

I never thought that preventing print screen would be possible... well what do you know, checkout the new tech - sivizion.com. With their video buffer technology there is no way to do a print screen, cool, really cool, though hard to use ... I think they license the tech also, check it out. (If I am wrong please post here how it can be hacked.) Found it here: How do I prevent print screen

于 2010-08-25T11:54:53.737 回答