我有相当大的音乐网站和大艺术家的数据库。我已经被注意到其他音乐站点抓取操作我们的站点数据 (我输入伪艺术家姓名各处,然后执行它们的 google 搜索)。

如何防止屏幕抓取操作?它是可能吗?

2010-07-01 20:49:04
问题评论:

您是否考虑过试图检测其扫描程序通过 IP 或类似 (请检查您的日志),只对于那些完全欺骗您的数据?这样一来,是的他们会"刮"网站,但也将无用,他们的"数据"。

有利因素下 lolcats 和冲销/混杂的文本的任何人?

类似问题stackoverflow.com/questions/2705394/...

所述元

@JonasCz 是讽刺笑话。悲伤的事情是类似方案包含在您的答案,虽然批评。

回答:

我将假定您已设置robots.txt.

其他人都已经提到,搜刮器等可以伪造他们的活动,几乎每个方面,可能很难发现来自于居心叵测的请求。

我认为︰

  1. 设置页, /jail.html.
  2. (因此将永远不会访问尊重 spider),不允许访问在robots.txt中的页面。
  3. 将链接放在一个页中,使用 CSS 隐藏起来 (display: none).
  4. 记录的/jail.html的访问者的 IP 地址.

这可能有助于您快速识别请求的 flagrantly 忽视robots.txt您的扫描.

您可能想要/jail.html您的整个整个网站时,有相同的确切标记作为正常的页面,但是 (/jail/album/63ajdka/jail/track/3aads8等) 的虚假数据。这样一来,坏搜刮器等不会被通知"不寻常的输入"之前有机会完全阻止他们。

我曾看到过这种技术称为"honeypot"之前。垃圾邮件筛选中也使用这一技术,在其中放置到页上的电子邮件地址,但隐藏它或使它清除该选项不用于发送到合法邮件的人。然后收集发送到该地址的任何邮件服务器的 IP 地址。

Robots.txt-> 虚假数据是实际非常艳丽假定它的工作原理︰ 它会随攻击的性质和 overcomplies。您可以做各种相关的事情。例如,排除某些在 robots.txt 并链接到该人将看不到不可见的方式突出显示链接。现在唯一的代理将获得有是您搜刮器等。

这假定它们是爬网的链接。大多数保护程序将尝试提交到某种类型的窗体并刮返回的数据。

我曾看到过 Perl 基于蜜罐的电子邮件链接到 Perl 脚本生成的其他"页"。阅读 robots.txt 的合法 bot 不看它,和它隐藏的用户通过 CSS,但扫描 (或电子邮件但是) 迅速陷于无限深度树中的页面,全部用上这些错误的数据。将链接到脚本右放在每个页面的开始处。

来个蜜罐充数的超另一件是 teergrubing (或缓送)。这是我喜欢的一个老方法时识别攻击者,使他发送垃圾邮件/抓取操作过程缓慢通过故意保持他连接打开的长像物理上尽可能不其超时的情况下。当然,这可能请通知他们您也要到它们,但了它的乐趣。en.wikipedia.org/wiki/Teergrubing

注意︰由于此回答的完整版超出堆栈溢出长度限制,您将需要到 GitHub 头读取扩展的版本,更多的提示和详细信息。


它有助于阻碍抓取操作 (也称为WebscrapingScreenscrapingWeb 数据挖掘搜集 Web,或Web 数据提取),以便知道这些保护程序的工作方式,并引申一下,什么会使他们无法很好地工作。

有各种类型的扫描程序,并且每个的工作方式︰

  • Spider,例如Google 的 bot或网站如HTtrack,递归的复印机到其他页中使用的链接,以获取数据。这些有时用于目标抓取操作以获取特定的数据,通常结合 HTML 分析器从每个页面中提取所需的数据。

  • 外壳脚本︰ 有时,常见的 Unix 工具用于抓取操作︰ Wget 或卷曲下载页面和 Grep (正则表达式) 提取的数据。

  • HTML 分析程序,如基于JsoupScrapy,和其他人。类似于 shell 脚本正则表达式基于的数据提取基于模式在 HTML 中,通常忽略其他所有内容页面从这些工作。

    例如︰ 如果您的网站具有一个搜索功能,这种扫描程序可能提交搜索请求,然后获取所有结果链接并从结果标题页 HTML,以专门都获取仅搜索结果链接和标题。这些都是最常见的。

  • 如基于 Screenscrapers。SeleniumPhantomJS,在实际的浏览器中打开您的网站,其运行 JavaScript、 AJAX,等等,然后通常通过从该网页,获取所需的文本︰

    • 已加载到页并且已运行 JavaScript 之后, 在浏览器中获取 HTML,然后使用 HTML 分析器中提取所需的数据。这些是最常见,和这么多的断裂 HTML 分析器的方法/搜刮器等也在此处适用。

    • 使生成的页面的屏幕快照,然后使用 OCR 从屏幕截图中提取所需的文本。这些都是极少数,和那些真正想要的数据只专用搜刮器等将对此进行设置。

  • Webscraping 服务,如ScrapingHubKimono事实上,没有的人的工作就是要弄清楚如何刮网站并拉出供其他用户使用的内容。

    Unsurprisingly,专业抓取操作服务是最难阻止,但如果您使其硬而且非常耗时,要弄清楚如何刮网站,这些 (以及它们为此支付的人) 不可能懒得刮网站。

  • 带有框架,在其他网页中嵌入您的网站和移动应用程序中嵌入您的网站。

    在技术上不抓取操作,移动应用程序 (Android 和 iOS) 可以嵌入的网站,并插入自定义 CSS 和 JavaScript,因此完全改变网页的外观。

  • 人类复制-粘贴︰ 人们将复制并粘贴您的内容要在其他地方使用它。

扫描程序,这些不同种之间许多重叠和许多搜刮器等行为类似,即使它们使用不同的技术和方法。

这些技巧主要是我自己想法,搜刮器等,以及位在 interwebs 周围的想法和信息的写入时遇到的各种困难。

如何停止抓取操作

完全不能阻止它,因为无论做什么,确定保护程序仍可以弄清楚如何刮。但是,您可以停止大量抓取通过执行几项操作︰

监视您的日志和流量模式;如果您看到异常活动,限制的访问︰

定期检查您的日志和异常活动表明自动访问 (搜刮器等),如很多类似的操作,从相同的 IP 地址,如果您可以阻止或限制访问。

具体而言,一些提议︰

  • 速率限制︰

    仅允许用户 (和搜刮器等) 在特定时间-执行有限的数量的操作为例,只允许少数搜索每秒钟从任何特定的 IP 地址或用户。这将减慢搜刮器等,并使它们失效。此外可以显示 captcha 是否太快或比真实的用户更快地完成操作。

  • 检测到不寻常的活动︰

    如果看不寻常的活动,如许多类似请求从一个特定的 IP 地址,有人看过多的页面或执行搜索的数量异常,可以阻止访问,或显示 captcha 的后续请求。

  • 不只是监视和速率限制通过 IP 地址-又需要使用其它指示符︰

    如果您阻止或速率限制,不只是为在每个 IP 地址的基础;可以使用其它的指标和方法来标识特定的用户或搜刮器等。一些指标,可以帮助您确定特定用户/保护程序包括︰

    • 如何快速用户填写窗体,和上一个按钮的位置单击。

    • 您可以收集到大量的信息通过 JavaScript,如屏幕大小 / 分辨率,时区,已安装的字体,等等;您可以使用此来识别用户。

    • HTTP 标头以及它们的顺序,尤其是用户代理。

    例如,如果许多请求获得一个 IP 地址,所有使用相同用户代理、 屏幕尺寸 (确定使用 JavaScript) 和用户 (在此情况下,扫描程序) 总是点击按钮上以相同的方式和按固定时间间隔可能是屏幕扫描程序;您可以暂时阻止类似的请求,并 (如。 来自该特定 IP 地址的用户代理和屏幕大小与阻止所有请求),并不会如造成不便真实用户的 IP 地址,这种方式。对于共享的 internet 连接。

    您也可以执行此进一步,即使他们来自不同的 IP 地址,表明分布式抓取操作 (使用机器人网或代理服务器的网络扫描程序) 可以找出类似的请求。如果您收到大量的其余部分都相同的请求,但他们来自不同的 IP 地址,您可以阻止它。同样,请注意意外阻止真正用户。

    这可能会有效防止 screenscrapers 运行 JavaScript,因为您可以从中获得大量的信息。

    在安全堆栈交换的相关的问题︰

  • 而不是暂时禁止访问,请使用 Captcha:

    简单的方法来实现速率限制是时间的暂时阻止访问某些一定,但是使用 Captcha 可能会更好,请参见一节 Captchas 进一步向下。

需要注册和登录

这是否适用于您的站点,以查看其中的内容,需要创建帐户。这是好的搜刮器等,警示,但也是为真正用户好警示。

  • 如果您需要创建帐户,登录,您可以准确地跟踪用户和扫描程序操作。这种方式,可以方便地检测特定帐户用于抓取操作,并禁止它。比如,速率限制或检测变得更容易,因为可以标识特定的保护程序,而不是只是 IP 地址 (例如,大量的短时间内搜索) 的滥用行为。

为了避免创建多个帐户的脚本,您应该︰

  • 需要电子邮件地址进行注册,并验证该电子邮件地址通过发送必须激活帐户打开的链接。允许每个电子邮件地址只能有一个帐户。

  • 要求在注册过程中解决 / 帐户创建 captcha。

需要查看的内容的帐户创建用户和搜索引擎消失; 将推动如果要查看文章需要创建帐户,用户将在其他地方转。

阻止从云托管和抓取操作服务 IP 地址的访问权限

有时,将从 web 宿主服务,例如,Amazon Web 服务或 GAE 或 VPSes 运行扫描。限制访问您的网站 (或放映 captcha) 请求来自使用此类云托管服务的 IP 地址。

同样,扫描可能会使用这样的代理服务器来避免被检测到的许多请求,还可以限制从使用代理服务器或 VPN 提供的 IP 地址的访问。

请注意,通过禁止访问代理服务器和 Vpn,您会产生负面影响真实的用户。

使错误消息如果您不要阻止 nondescript

如果您不要阻止 / 限制访问权限,您应该确保,您不必扫描程序是什么原因导致块,从而为他们提供如何修复其扫描程序的线索。所以是个好主意是显示错误页面,带有类似的文本︰

  • 过多的请求,从您的 IP 地址,请稍后再试。

  • 错误,用户代理标头不存在 !

相反,显示并没有告诉扫描程序是什么原因导致友好的错误消息。类似这样要好得多︰

  • 对不起,出错了。您可以联系helpdesk@example.com,通过支持问题仍然存在。

这也是许多真实的用户友好界面的用户,应该他们曾看到过这种错误页。此外应考虑显示 captcha 的后续请求,而不是一个硬块,真实的用户将看到错误消息的情况下,这样不阻止并因此导致合法用户与您联系。

如果您怀疑您的网站正在被扫描程序,请使用 Captchas。

Captchas ("完全自动化的测试告诉计算机和人工分离") 是非常有效的防范停止扫描。遗憾的是,它们也是非常有效地反感的用户。

在这种情况下,它们是有用怀疑可能的扫描程序,并且想要停止抓取操作,而不是扫描程序,但真实用户的情况下还阻止访问。您可能需要考虑在允许对内容的访问,如果您怀疑扫描程序之前显示 captcha。

请注意使用 Captchas 时的注意事项︰

  • 不滚动您自己,使用类似于 Google 的reCaptcha ︰ 很容易得多,比实施 captcha 自己时,它仍比一些模糊更易于使用扭曲的文本解决方案则可能会拿出自己 (用户通常只需要勾选框),并也是脚本编写者比一个简单的图像从您的站点提供解决了很多难

  • 在 HTML 标记中不包括 captcha 的解决方案: (尽管非常很好地隐藏) 已经实际上看到了 captcha页面本身中,解决方案的一个网站就可以相当无用。不这样做。再次,使用像 reCaptcha,服务并不会有这种问题,(如果正确使用)。

  • 可以批量解决 Captchas︰ 有 captcha 解决服务地方实际,低支付、 人类解决 captchas 批量。再次,使用 reCaptcha 最好在这里,与他们拥有的保护 (例如,用户必须要解决 captcha 相对较短时间内)。这种服务不能使用,除非您的数据是非常有用。

用作图像的文本内容

可以将文本呈现图像服务器端,并提供所显示,这将阻碍提取文本的简单搜刮器等。

但是,这是为屏幕读取器、 搜索引擎、 性能和几乎所有其他错误。它也是违法行为在某些地方 (可访问性,因为如。 美国残疾法案与),并且也很容易绕过用一些 OCR,所以千万不要这样做。

可以执行类似与 CSS sprite,但是,面临相同的问题。

不公开完整的数据集︰

如果可行,不提供一种方法的脚本 / 机器人来获取所有的数据集。举一个例子︰ 有一个新闻网站,有很多的单篇文章。通过搜索只可以访问这些文章是可以使它们通过现场搜索,并且,如果您没有对列表中的所有文章的网站和其 Url 的任何地方,这些文章都可以仅通过使用搜索功能。这意味着,想要关闭您的站点获取所有文章的脚本将需要搜索的文章才能找到它们,这将是费时的出现严重效率低下,并将很有希望的扫描程序中可能出现的所有可能短语放弃。

这都将无效,如果︰

  • Bot / 脚本不会不想要 / 无论如何都需要完整的数据集。
  • 文章从类似example.com/article.php?articleId=12345的 URL 提供服务。这 (和类似的东西) 来保护程序只是循环访问所有articleIds,然后请求通过这种方式的所有文章。
  • 还有其他方法,以最终找到所有的文章,如通过编写一个脚本来按照内文章,这导致其他文章的链接。
  • 查找类似"和"或""可以显示几乎所有内容,因此这是一个需要注意。(可以避免这种通过只返回前 10 或 20 的结果)。
  • 您需要搜索引擎来查找内容。

不公开您的 Api、 终结点和类似的东西︰

请确保您不公开任何 Api,甚至无意中。例如,如果您正在使用 AJAX 或网络中的请求从 Adobe Flash 或 Java 小程序 (上帝禁止 !),它是一件小事,要从页面查看网络请求并找出其中这些请求,将反向工程并在扫描程序程序中使用这些终结点将数据装载。确保进行模糊处理完终结点并使这些其他人难以使用,如所述。

若要阻止 HTML 分析器和保护程序︰

由于 HTML 分析器运行从基于可识别的模式,在 HTML 页面中提取内容,我们可以有意更改中含有破坏这些搜刮器等,这些模式或甚至螺钉与他们。大部分这些技巧也适用于 spider 和 screenscrapers 等其他扫描过。

经常更改您的 HTML

保护程序直接处理 HTML 这样通过提取特定的可识别部分的 HTML 页的内容。例如︰ 如果在您的网站上所有页面都的div的 id 为article-content,其中包含文本的文章,它是一件小事,可以编写一个脚本来访问您的站点上的所有文章页和提取文本内容的每个文章页面和瞧上article-contentdiv,扫描程序已从您的站点可以在其他地方重新使用的格式的所有文章。

如果经常更改 HTML 和页面的结构,这种扫描将不再起作用。

  • 您可以经常更改 id 和类的元素在 HTML 中,甚至自动。因此,如果您的div.article-content就变成类似像div.a4c36dda13eaf0,并更改每周,扫描程序最初,适合,但一周后将会破坏。请务必更改您的 id 的长度 / 类,否则扫描程序将使用div.[any-14-characters]改为查找所需的 div。太狼其他类似的孔.

  • 如果没有找到所需的内容从标记方法,扫描程序会使 HTML 结构化的一种方式。因此,如果所有文章页都是相似的因为每个divdiv之后h1是报导内容,搜刮器等会基于该报导内容。再次,要断开此,可以添加/删除多余标记到您的 HTML,定期和随机,如。添加额外divs 或spans。与现代的服务器端 HTML 处理,这不应该太难。

需要注意的事项︰

  • 它将是乏味和困难,要实现、 维护和调试。

  • 您将不会降低缓存。尤其是当您更改 id 或 HTML 元素的类,这需要相应更改您的 CSS 和 JavaScript 文件,这意味着,每当您更改它们,它们将不得不重新下载浏览器。这将导致较长的页面加载时间的重复访问者,并提高了的服务器的负载。如果您只能更改其每周一次,它将不是很大的问题。

  • 聪明的保护程序仍然能够通过推断其中的实际内容,如获取您的内容。通过了解大单个页面上的文本块很可能是实际的文章。这使得可能仍然找到并从页面中提取所需的数据。Boilerpipe完全这样做。

实质上,请确保不容易为一个脚本来查找类似的每个页面所需的实际内容。

有关这可以在 PHP 中实现的方式的详细信息请参阅如何防止根据 XPath 获取页面内容的爬网程序

更改基于用户的位置您的 HTML

这是有点类似于上一个提示。如果您提供基于用户位置的其他 HTML / 国家 (由 IP 地址),这可能会中断保护程序,它提供给用户。例如,如果有人编写它从您的网站 scrapes 的数据移动应用程序,它将可以正常工作最初,但休息时实际分发给用户,因为这些用户可能在不同的国家,并因此得到不同 HTML 嵌入式扫描程序未设计为使用。

经常更改您的 HTML,积极螺钉与保护程序这样做 !

示例︰ 您在您网站上,位于example.com/search?query=somesearchquery,它返回以下 HTML 有搜索功能︰

<div class="search-result">
  <h3 class="search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
  <p class="search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
  <a class"search-result-link" href="/stories/story-link">Read more</a>
</div>
(And so on, lots more identically structured divs with search results)

您可能已经猜到这很容易刮︰ 扫描程序需要做的只是点击搜索 URL 的查询,并从返回的 HTML 中提取所需的数据。除了定期更改 HTML,如上面所述,您还可以留下的旧 id 和类中的旧的标记、 隐藏它使用 CSS,并填入虚假数据,从而毒害的扫描程序。以下是如何在搜索结果页可以进行更改︰

<div class="the-real-search-result">
  <h3 class="the-real-search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
  <p class="the-real-search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
  <a class"the-real-search-result-link" href="/stories/story-link">Read more</a>
</div>

<div class="search-result" style="display:none">
  <h3 class="search-result-title">Visit Example.com now, for all the latest Stack Overflow related news !</h3>
  <p class="search-result-excerpt">Example.com is so awesome, visit now !</p>
  <a class"search-result-link" href="http://example.com/">Visit Now !</a>
</div>
(More real search results follow)

这将意味着编写的基于类或 Id 的 HTML 中提取数据的扫描将继续看起来起作用,但随着它们使用 CSS 隐藏的他们将得到虚假数据或数据,它将永远不会看到真实的用户,甚至广告。

螺钉的扫描程序︰ 插入虚假、 不可见 honeypot 数据到您的页面

添加到前面的示例中,可以将不可见 honeypot 项添加到您的 html 代码,捕捉搜刮器等。无法添加到前面描述的搜索结果页的一个示例︰

<div class="search-result" style=”display:none">
  <h3 class="search-result-title">This search result is here to prevent scraping</h3>
  <p class="search-result-excerpt">If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-)
  Note that clicking the link below will block access to this site for 24 hours.</p>
  <a class"search-result-link" href="/scrapertrap/scrapertrap.php">I'm a scraper !</a>
</div>
(The actual, real, search results follow.)

扫描程序,旨在使所有的搜索结果将领取这,只是像任何其他的实际搜索结果在页面上,并请访问该链接,查找所需内容。真正的人类将甚至从未看到它的初衷 (因为它正在使用 CSS 隐藏),并且不会访问链接。如 Google 的一个真实和理想蜘蛛不会访问链接或者因为不/scrapertrap/允许您 robots.txt 中。

您可以使您scrapertrap.php做某事喜欢阻止访问它的 IP 地址的访问权限或强制从该 IP 的所有后续请求 captcha。

  • 不要忘记,这样搜索引擎机器人不属于禁止 robots.txt 文件中的您 honeypot (/scrapertrap/)。

  • 可以/应该结合这与先前的频繁地更改 HTML 刀尖。

  • 这经常更改过,如保护程序最终学会避免它。更改 honeypot URL 和文本。此外需要考虑更改的内联 CSS 用于隐藏,并使用 ID 属性和外部 CSS 相反,搜刮器等将学习以避免任何具有styleattrihttps://stackoverflow.com/documentation/jsoup/297/introduction-to-jsoup#t=201607291546114068435 & = remarksbute 使用 CSS 用于隐藏内容。此外尝试仅启用它有时,因此扫描程序工作开始时,但是休息一段时间后。这也适用于以前的提示。

  • 恶意人员可以防止真实用户的访问权限共享链接到您 honeypot 或甚至嵌入该地方为图像的链接 (如。 在论坛上)。通常情况下,更改 URL,使任何禁止时间相对较短。

如果检测到扫描程序,提供虚假和无用数据

如果检测到什么显然是扫描程序,您可以提供虚假和无用的数据;这将损坏扫描程序从您的网站中获取的数据。您还应该能够更不可能将这类虚假数据与真实数据,区分开来,以便保护程序不知道他们正在与被拧。

举一个例子︰ 有一个新闻网站;如果检测扫描程序,而不是阻止访问,提供虚假,随机生成的文章,并且这将损害扫描程序获取的数据。如果使虚假数据真实事物没有区别,您将使其难扫描来获取他们的希望,即实际的、 真实的数据。

如果用户代理空 / 丢失不接受请求

通常情况下,惰性写入保护程序将不会发送用户代理标头与他们的请求,而所有的浏览器以及搜索引擎 spider 将。

如果得到请求的用户代理标头不存在,您可以显示 captcha,或只是阻止或限制访问。(或假数据作为如下所述,还是其他什么...)

它是一件小事,欺骗,但作为一种措施对保护程序的编写质量低劣值得实施。

不接受请求,如果用户代理是常见的扫描程序黑名单中所使用的扫描

在某些情况下,保护程序将使用一个用户代理,它没有实际的浏览器或搜索引擎蜘蛛使用,如︰

  • "Mozilla"(只是,不出现任何其他。我见过几个问题,抓取操作使用的。真实的浏览器不应使用只)
  • "Java 1.7.43_u43"(默认情况下,Java 的 HttpUrlConnection 使用如下所示。)
  • "BIZCO EasyScraping 2.0"Studio
  • "wget","卷","libcurl"。.(Wget 和卷曲有时用于基本抓取操作)

如果您发现扫描您的网站上使用特定的用户代理字符串,它不使用实际的浏览器或合法 spider,可也添加到黑名单。

如果它不会请求 (CSS 的图像) 的资产,不是一个真正的浏览器。

真实的浏览器 (几乎总是) 将请求和下载资产,如图像和 CSS。HTML 分析程序和搜刮器等不会因为它们只是感兴趣的实际页面和它们的内容。

无法登录到您的资产,请求,如果仅 html 中查看大量请求,则可能是扫描程序。

请注意,搜索引擎机器人,远古的移动设备、 屏幕阅读器和错误配置的设备可能不要求资产要么。

使用,而且需要 cookie;使用它们来跟踪用户和扫描程序操作。

您可以要求 cookie 才能查看您的网站启用。这将阻止没有经验和个新手扫描程序编写器,但是很便于扫描程序发送 cookie。如果没有使用,并要求他们,可以跟踪用户和扫描程序操作,并因此实现速率限制、 阻止,或显示在每个用户而不是每个 IP 每 captchas。

例如︰ 当用户执行搜索时,将设置一个唯一的标识 cookie。当查看结果页时,请验证该 cookie。如果用户打开 (可以告诉从 cookie) 的所有搜索结果,然后可能是扫描程序。

使用 cookie 可能会效率低下,因为搜刮器等可以发送其请求 cookie,并根据需要放弃他们。您还将阻止禁用了 cookies,如果您的网站只适用于 cookie 的真实用户的访问权限。

请注意,是否使用 JavaScript 来设置和检索 cookie,您将阻止保护程序不运行 JavaScript,因为它们不能检索和发送他们的请求与该 cookie。

使用 JavaScript + Ajax 加载您的内容

您可以使用 JavaScript + AJAX 加载您的内容本身在页面加载之后。这将使内容不运行 JavaScript 的 HTML 分析器无法访问。这通常是个新手,经验不足的程序员编写保护程序到有效的保护措施。

请注意︰

  • 使用 JavaScript 来加载实际内容会降低用户体验并提高性能

  • 搜索引擎可能无法运行 JavaScript,因此阻止他们索引您的内容。这可能不是一个问题的搜索结果页面,但可能用于其他操作,比如文章页面。

标记、 网络请求的脚本和其他所有内容进行模糊处理。

如果您使用 Ajax 和 JavaScript 加载您的数据,对传输的数据进行模糊处理。举一个例子,您无法编码 (使用更简单,就像 base64 或更复杂),服务器上的数据然后解码并将其显示在客户端上之后通过 Ajax 取。这将意味着检查网络通信量的人看不到立即网页如何工作以及加载数据,并为他们将不得不通过反向工程处理您的 descrambling 算法会更苛刻的人直接从您的终结点的请求请求数据。

  • 如果您使用 Ajax 加载数据,应使其硬加载页面第一次,如通过要求作为参数,可以在您 JavaScript 或 HTML 中嵌入一些会话密钥的情况下使用终结点。

  • 此外可以直接在初始的 HTML 页面中嵌入模糊处理后的数据,并使用 JavaScript deobfuscate 并显示它,这会避免额外的网络请求。这样做将使其显著更难提取的数据使用纯 HTML 解析器不与编写扫描程序将不得不逆向运行 JavaScript,这对工程您 JavaScript (这应该进行模糊处理过)。

  • 您可能希望定期更改您的模糊处理方法,以中断已经找到它的扫描。

有的做就像这样,但是几个缺点︰

  • 它将是乏味和困难,要实现、 维护和调试。

  • 它将针对扫描和 screenscrapers 实际运行 JavaScript,然后提取的数据无效。(大多数简单的 HTML 分析器不但是运行 JavaScript)

  • 它可以让网站无法正常工作实际用户是否有禁用 JavaScript。

  • 性能和页面加载时间将受到影响。

非技术性︰

  • 告诉人们不要刮,和一些将尊重它

  • 查找某个律师

  • 使数据可用,提供了一个 API:

    您可以使数据更易于使用,需要归属和链接返回到您的网站。也许是为其收取 $$$。

杂项︰

  • 还有商业抓取操作保护服务,如 Cloudflare 或提炼网络防刮削 (它是如何工作的详细信息在此处),其执行这些操作,以及其他为您。

  • 找到一个平衡点之间的真实用户的易用性和扫描程序 proofness︰ 不要将影响用户体验中的一种方式或另一种消极的一切找到折衷。

  • 不要忘记您的移动站点和应用程序。如果您有一个移动应用程序,这可能也是 screenscraped,可以检查网络通信量,确定它使用的 REST 端点。

  • 扫描可以刮其他扫描︰ 如果没有一个具有攒钱的与您的内容的网站,其他扫描可以刮从该扫描程序的网站。

更多阅读︰

带来了我这里。一个非常令人印象深刻的答案。此外,一个非常令人惊叹的修订历史记录。感谢您的帖子。获得 upvote。不只是因为的工作量将放入到此,但因为它是对我有用。

答得好 !以下是一些想法。A real browser will (almost always) request and download assets such as images and CSS也适用辅助读者吗?CAPTCHA 是中断因此至少专业的服务,但它可能不受影响。使用 cookie 的需要通知/同意在欧盟。Find a balance between usability for real users and scraper-proofness也平衡编程时间/复杂性与财务方面的好处。

@EricJ。我认为我提到的屏幕阅读器可能会请求 CSS 或图像。我将展开的。2 > Captcha 被破坏?普遍被视为一种最佳的解决方案不过,是的但它们可以解决批量。欧盟中的 cookie︰ 正确的但不是总是,并没有 exeptions,加上它可能不是那么坏。"编程时间和福利之间平衡"-非常真实。

@JonH,如果他们感兴趣,他们会阅读它。另外,我已经分成其段落标题和子标题,以便用户可以对其进行扫描和阅读他们想要的部分。有很多同样长答案等事实上,并且人们都读一遍。

P.S.内容的主意我 steganographic 指纹识别可能使用在法庭中。当您证明,数据的私钥的持有人答对了,直接在数据的独有特性通过假设冲击...

起诉收入囊中。

严重︰ 如果您有一些钱,交谈很好,知道他们方面互联网络的年轻律师。您可能真的能够在此处执行操作。根据其中的站点为基础,可以让律师调高停止和达标或等效的您所在国家/地区。您可能能够至少会 bastards 感到恐慌。

文档插入您的虚拟值。清楚地 (但 obscurely) 给您点的插入虚拟值。我认为这是与电话簿公司的常见做法,这里在德国,我认为,当 copycats 被损坏通过虚假条目 1:1 复制这些已被几个实例。

如果这会迫使您到会弄乱您的 HTML 代码,拖动下 SEO、 有效性和其他事情 (即使相同页对每个请求使用稍有不同的 HTML 结构模板化系统可能已经帮助许多针对搜刮器等,总是依赖于 HTML 结构和类 ID 的名称来获取内容。),那就太可惜

这种情况是什么版权法是良好的。撕下其他人的诚实工作,赚钱的是事情您应该能够针对抵制。

只有在稳定的法律框架的国家/地区。

律师兴旺离不开冲突-,和它从中获益。很少如果律师曾建议您不要转到法院。拥有人将告诉您赢取并丢失都没有任何如何处理好概念司法,但参数、 情绪和偏置的当天。请记住,是否它出现问题,您能够不仅包括律师的成本,但其他各方承担,和如果他们决定以起诉-嗯。轻松地无法在您的生活中失去家庭和任何其他资产。没有一场赌博我建议。我建议您不惜一切代价避免法院。

我同意 @TomL。如果是在西方,很有些貌似合理。但是,如果这些在印度/中国/俄罗斯/乌克兰/whatever-然后,老实说,没有机会到最小。我可以说关于俄罗斯法院︰ 它们甚至就不会打扰索赔处理。

其实没什么特别要完全防止这种情况,可以采取。搜刮器等可以伪造他们的用户代理,使用多个 IP 地址等,并且以普通用户出现。能做的唯一事情是使文本在加载页时不可用-使其与图像,闪存,或使用 JavaScript 中加载它。不过前, 两个是不正确的想法,而且最后一个将可访问性问题如果没有为某些常规用户启用 JavaScript。

如果他们绝对是 slamming 网站,rifling 通过您的所有页面,您可以做某种类型的速率限制。

还有一些希望通过。保护程序依赖于您的站点的数据会以统一的格式。如果您无法进行随机化某种程度上它可能会破坏其扫描程序。比如,更改网页元素的每个负载等的 ID 或 class 的名称。提供了很多的工作要做,但我不确定它是否值得这样做。即使这样,他们就可以可能得到周围具有足够的努力。

创建限制多少页每分钟可以查看 IP 的系统是很好的抗攻击,屏幕保护程序将刻录速度大于任何正常人在网站上四处。

同意。IPs 和财力,受到多数托管公司。

re:"更改网页元素的每个负载等的 ID 或 class 的名称类似的事物。"这就是不这样坏,如果您创建的类命名通过 PHP 并只需使用 < div 类 ="<? php 回显 $myPHPGeneratedClassName;? >"> 您甚至可以使用它在随机字符串以使其完全独特。任何停止它们查找模式导致很难从 DOM 分析

不难找到一个 IP。有许多代理、 朋友的计算机,计算机工作、 学校计算机、 库计算机...

@user257493︰ 对,但我们所谈论的内容这里抓取操作数据的任何人。很有可能他们不打算转到工作只是为了收集数据。并且,如果他们这样做,最终会耗尽他们供应的 IPs。

提供 XML 的 API 来访问您的数据;易于使用的方式。如果人们想让您的数据,他们可以了解它,也可能全部转。

您可以提供功能的子集,以有效的方式,通过这种方式确保,最起码,不会设置 HTTP 请求和大量的带宽 guzzle 搜刮器等。

然后您所要做的就是诱使的人想要使用的 API 的数据。;)

这似乎是非常合理的。屏幕抓取操作 damn 难以避免,并且如果您提供一个 API,可以放一些限制,添加通知 ("中的内容---.com"),并基本上控制在给定的数据。

@alecwh︰ 和收取访问 !

我已经授予您其中,部分原因是因为网站是这样每一个网站做得更好。我们希望它变得更常用。

内容来源于Stack Overflow How do I prevent site scraping? [closed]
请输入您的翻译

How do I prevent site scraping? [closed]

确认取消