【问题标题】:Writing a web crawler -- how do I emulate what Google does when it sees #! in a URL?编写一个网络爬虫——我如何模仿谷歌看到#!在网址中?
【发布时间】: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


    【解决方案1】:

    我完全错过了这个文档中包含哪些字符被转义的细节:

    The full "Ajax crawling" specification

    我把这个问题留在这里,以防其他人需要找到该规范。

    【讨论】:

      猜你喜欢
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 2012-06-21
      相关资源
      最近更新 更多