编写网络爬虫 - 如何模仿Google在看到#时所做的事情!在URL中?

时间:2013-10-08 15:10:26

标签: web-crawler google-search hashbang

我正在编写一个网络抓取工具,并希望在Google检索到的网页中遇到#!网址时执行该操作。如果URL没有#!谷歌将它添加到最终将获取和索引的页面列表中,但它在看到#时会做一些特别的事情!如Google's "Getting started with Ajax crawling" document.

中所述

当Google看到包含#!的网址时,会修改网址,为修改后的网址执行HTTP GET,然后将检索到的网页编入索引,就好像它已检索到其中包含#!的网址一样(而不是它实际检索到的URL)。我试图模仿它所做的转变,这一点尚未完全描述。

引用页面部分描述了Google修改网址所做的工作,并告诉网站作者如何撤消转化,以便他们知道原始网址是什么,并可以返回他们想要在#!下编入索引的数据URL。该页面说的一件事是:Note: The crawler escapes certain characters in the fragment during the transformation. To retrieve the original fragment, make sure to unescape all %XX characters in the fragment. More specifically, %26 should become &, %20 should become a space, %23 should become #, and %25 should become %, and so on.

提到的“转化”是将#!替换为?_escaped_fragment=并转义#!之后的文本中的某些特殊字符。该文本告诉网站作者通过(部分)转换文本中的%XX来改变转换 - 在修改后的URL中 - 跟随?_escaped_fragment=。问题是,我如何知道要转义哪些特殊字符,以便我的抓取工具可以请求Google要求的相同替换网址?

在引用的段落中,Google列出了一些它会逃脱的内容,但最后的“依此类推”表明转义字符的完整列表较长 - 但尚未完整描述。

理论上,每个角色(甚至是字母)都可以作为%XX进行转义,但每个网站正确处理的可能性并不高。如何判断Google将逃脱哪些角色,以便我的抓取工具会请求与Google相同的网址?

(如果我控制了一个记录了传入网址的网站,并且我可以让Google抓取,我可以在#!之后创建一个包含大量特殊字符网址的网页,并查看通过查找获得的内容在?_escaped_fragment_=的任何网址上 - 但我是否真的需要设置一个虚假的网站来获得答案?)

1 个答案:

答案 0 :(得分:0)

我完全错过了这样一个事实:本文档中有哪些字符被转义的详细信息:

The full "Ajax crawling" specification

我在这里留下这个问题,万一其他人需要找到那个规格。