【发布时间】:2013-10-15 14:27:21
【问题描述】:
我正在编写一个网络爬虫,并且想做 Google 在它检索到的页面中遇到 #! URL 时所做的事情。如果 URL 没有 #!谷歌将它添加到最终将获取和索引的页面列表中,但是当它看到 #! 时它会做一些特别的事情!如Google's "Getting started with Ajax crawling" document. 中所述
当 Google 看到包含 #! 的 URL 时,它会修改该 URL,对修改后的 URL 执行 HTTP GET,然后将检索到的页面编入索引,就像它检索到包含 #! 的 URL(而不是它实际检索到的 URL)。我正在尝试模拟它所做的转换,但没有完全描述。
引用的页面部分描述了 Google 修改 URL 的操作,并告诉网站作者如何反转转换,以便他们可以知道原始 URL 是什么,并可以返回他们希望在 #! 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=,并对#!后面的文本中的一些特殊字符进行转义。该文本告诉网站作者通过(部分)在修改后的 URL 中跟随?_escaped_fragment= 的文本中取消转义 %XX 来反转转换。问题是,我如何知道要转义哪些特殊字符,以便我的爬虫可以请求与 Google 请求相同的替换 URL?
在引用的段落中,Google 列出了一些它会转义的字符,但末尾的“等等”表明转义字符的完整列表更长——但没有完全描述。
理论上每个字符(甚至是字母)都可以转义为 %XX,但每个网站正确处理的机会并不高。如何确定 Google 会转义哪些字符,以便我的爬虫请求与 Google 相同的 URL?
(如果我控制了一个记录传入 URL 的网站,并且我可以让 Google 抓取,我可以创建一个页面,其中包含许多在 #! 之后带有特殊字符的 URL,然后通过查找来查看逃逸的内容在任何带有?_escaped_fragment_= 的网址上——但我真的必须建立一个虚假的网站才能得到答案吗?)
【问题讨论】:
标签: web-crawler google-search hashbang