抓取工具的HTML快照 - 了解其工作原理

时间:2010-10-08 11:36:46

标签: html web-crawler

我今天正在阅读article。说实话,我真的很感兴趣“2.你的大部分内容是由服务器端技术(如PHP或ASP.NET)创建的”。

我想了解我是否理解:)

我创建了那个php脚本(gethtmlsnapshot.php),其中包含服务器端的ajax页面(getdata.php)和i转义(为了安全)参数。然后我在html静态页面的末尾添加它(index-movies.html)。对?现在...

1 - 我把gethtmlsnapshot.php放在哪里?换句话说,我需要调用(或更好地,爬虫需要)该页面。但是如果我在主页面上没有链接,则爬虫无法调用它:O爬虫如何使用_escaped_fragment_参数调用该页面?如果我不在某处特定的话,它无法知道它们:)

2 - 船员如何使用参数调用该页面?和以前一样,我需要使用参数链接到该脚本,因此工作人员浏览每个页面并保存dinamic结果的内容。

你能帮帮我吗?你怎么看待这种技术?如果爬虫的开发者以其他方式做自己的机器人,那会不会更好? :)

让我知道您的想法。干杯

1 个答案:

答案 0 :(得分:8)

我认为你出了点问题,所以我会试着解释一下这里发生了什么,包括背景和替代方案。因为这确实是一个非常重要的话题,我们大多数人偶尔​​偶然发现(或至少是类似的东西)。

使用AJAX或者说异步增量页面更新(因为大多数页面实际上不使用XML而是JSON),丰富了Web并提供了出色的用户体验。

然而,这也是有代价的。

主要问题是客户端根本不支持xmlhttpget对象或JavaScript。 在开始时,您必须提供向后兼容性。 这通常通过提供链接并捕获onclick事件并触发AJAX调用而不是重新加载页面来完成(如果客户端支持它)。

今天几乎每个客户都支持必要的功能。

所以今天的问题是搜索引擎。因为他们没有。嗯,这不完全正确,因为他们部分(尤其是谷歌),但出于其他目的。 Google评估某些JavaScript代码以防止Blackhat SEO(例如指向某个地方的链接,但使用JavaScript打开一些完全不同的网页...或者客户端看不到的html关键字代码,因为它们被JavaScript删除或反之亦然)。

但要保持简单,最好考虑一个非常基本的浏览器的搜索引擎爬虫,没有CSS或JS支持(它与CSS相同,其派对因特殊原因而解析)。

因此,如果您的网站上有“AJAX链接”,并且Webcrawler不支持使用JavaScript跟踪它们,那么它们就不会被抓取。或者他们呢? 那么答案就是JavaScript链接(比如document.location)。谷歌通常足够聪明地猜测目标。 但是没有制作ajax电话。很简单,因为它们返回部分内容,并且由于上下文未知而且唯一URI不代表内容的位置,因此无法从中构建有意义的整页。

因此基本上有3种策略可以解决这个问题。

  1. 在具有正常href属性的链接上有一个onclick事件作为回退(因为它解决了客户端和搜索引擎的问题,因此是最好的选择)
  2. 通过您的站点地图提交内容网站,以便将它们编入索引,但与您的站点链接完全分开(通常页面提供此网址的永久链接,以便外部页面链接它们以进行页面调整)
  3. ajax抓取计划
  4. 这个想法是让你的JavaScript xmlhttpget请求与相应的href属性纠缠在一起,如下所示: www.example.com/ajax.php#!key=value

    所以链接如下:

    <a href="http://www.example.com/ajax.php#!page=imprint" onclick="handleajax()">go to my imprint</a>
    

    函数handleajax可以评估document.location变量以触发增量异步页面更新。它也可以通过id或url或其他任何东西。

    抓取工具会识别ajax抓取方案格式并自动提取http://www.example.com/ajax.php.php?%23!page=imprint而不是http://www.example.com/ajax.php#!page=imprint 所以你查询字符串然后contanis html片段,你可以从中判断哪些部分内容已被更新。 因此,您必须确保http://www.example.com/ajax.php.php?%23!page=imprint返回一个完整的网站,看起来网站应该在xmlhttpget更新后向用户查看。

    一个非常优雅的解决方案也是将一个对象本身传递给处理函数,然后处理函数获取与爬虫使用ajax但使用其他参数获取的相同的URL。然后,您的服务器端脚本决定是传递整个页面还是仅传递部分内容。

    这确实是一种非常有创意的方法,这是我的个人意见分析:

    亲:

    • 部分更新页面接收唯一标识符,此时它们是语义网中的完全限定资源
    • 部分更新的网站会收到可由搜索引擎呈现的唯一标识符

    CON:

    • 它只是搜索引擎的后备解决方案,而不是没有JavaScript的客户
    • 它提供了黑帽SEO的机会。因此,谷歌肯定不会完全采用它,或者通过对内容进行适当的验证来对这种技术进行高排名。

    结论:

    • 只是常规链接与后备遗留工作href属性,但onclick处理程序是一种更好的方法,因为它们为旧浏览器提供功能。

    • ajax抓取方案的主要优点是部分更新的网站获得了唯一的URI,您无需创建以某种方式充当可索引和可​​链接对应的重复内容。

      < / LI>
    • 你可以说ajax爬行方案实现更一致,更容易实现。我认为这是您的应用程序设计的问题。