我今天正在阅读article。说实话,我真的很感兴趣“2.你的大部分内容是由服务器端技术(如PHP或ASP.NET)创建的”。
我想了解我是否理解:)
我创建了那个php脚本(gethtmlsnapshot.php),其中包含服务器端的ajax页面(getdata.php)和i转义(为了安全)参数。然后我在html静态页面的末尾添加它(index-movies.html)。对?现在...
1 - 我把gethtmlsnapshot.php放在哪里?换句话说,我需要调用(或更好地,爬虫需要)该页面。但是如果我在主页面上没有链接,则爬虫无法调用它:O爬虫如何使用_escaped_fragment_参数调用该页面?如果我不在某处特定的话,它无法知道它们:)
2 - 船员如何使用参数调用该页面?和以前一样,我需要使用参数链接到该脚本,因此工作人员浏览每个页面并保存dinamic结果的内容。
你能帮帮我吗?你怎么看待这种技术?如果爬虫的开发者以其他方式做自己的机器人,那会不会更好? :)让我知道您的想法。干杯
答案 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种策略可以解决这个问题。
这个想法是让你的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:
结论:
只是常规链接与后备遗留工作href属性,但onclick处理程序是一种更好的方法,因为它们为旧浏览器提供功能。
ajax抓取方案的主要优点是部分更新的网站获得了唯一的URI,您无需创建以某种方式充当可索引和可链接对应的重复内容。
< / LI>你可以说ajax爬行方案实现更一致,更容易实现。我认为这是您的应用程序设计的问题。