我正在编写一个网络爬虫,并且想做谷歌在它#!
检索到的页面中遇到 URL 时所做的事情。如果 URL 没有 #! 谷歌将它添加到最终将获取和索引的页面列表中,但是当它看到 #! 时它会做一些特别的事情!如Google 的“Ajax 抓取入门”文档中所述。
当 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 后面的文本中取消转义 %XX 来反转转换?_escaped_fragment=
。问题是,我如何知道要转义哪些特殊字符,以便我的爬虫可以请求与 Google 请求相同的替换 URL?
在引用的段落中,谷歌列出了一些它会转义的内容,但最后的“等等”表明转义字符的完整列表更长——但没有完全描述。
从理论上讲,每个字符(甚至是字母)都可以转义为 %XX,但每个网站正确处理它的机会并不高。如何确定 Google 会转义哪些字符,以便我的爬虫请求与 Google 相同的 URL?
(如果我控制了一个记录传入 URL 的网站,并且我可以让 Google 抓取,我可以创建一个页面,其中包含许多在 #! 之后带有特殊字符的 URL,并通过查看任何 URL 来查看转义的内容有?_escaped_fragment_=
——但我真的必须建立一个虚假的网站才能得到答案吗?)