8

我想检索几年/几个月前进行的旧 Google 搜索,这些搜索出现在 Google 网络历史记录中。如何以编程方式全部检索它们?

https://www.google.com/history/?output=rss只提供最近的谷歌搜索,但不是全部。

还有这个问题:如何检索我的谷歌搜索历史?没有为我的问题提供任何答案!

4

5 回答 5

14

您可以传递月、日和年作为参数来获取特定日期的历史记录。

例如,2010 年 12 月 1 日的https://www.google.com/history/lookup?month=12&day=1&yr=2010&output=rss

没有办法获得整月或整年的历史,更不用说整个历史了。但是关于参数的这些信息必须至少使您能够在某个循环中获取整个历史记录,该循环每次都可以追溯到更早的一天。注意不要在太短的时间内吸水太多。

于 2010-12-08T05:12:07.817 回答
4

您确实需要逐页解析 HTML,然后获取您的数据,因为我认为没有其他选择!

于 2010-12-04T14:19:13.610 回答
3

我认为这将非常困难。

我知道这并不能完全回答您的问题,但至少可以保留网页。有一些组织和工具可以让您从过去的日期重新创建网页 - 例如参见http://www.mementoweb.org/

更新:我刚刚得知 Memento 获得了数字保存奖 (http://www.dpconline.org/newsroom)

于 2010-12-02T08:11:37.900 回答
3

我知道您不想返回每个页面,但您实际上并不需要解析整个页面,只需查找始终位于条目之前的 html。从我刚刚启动谷歌网络历史并进行一些简单的搜索开始,如果您浏览历史页面,您搜索的每个字符串都如下:<td style="padding:3px 0"><table id=bkmk_view_ class=noborder ><tr><td><table class="elem noborder"><tr><td class="grey" nowrap>Searched for&nbsp;</td><td nowrap><a title="http://www.google.com/search?q= 并且后面是&(与号)。前面的 html 序列在页面上是唯一的,仅在列出历史搜索词时才会出现。

如果你使用两个术语,你会在两个术语之间得到一个 +。不同搜索模式的其他约定,我没有全部介绍。

看起来如果你使用 BalusC 的方法来传递参数,那么你可以检索 html,在文档中搜索我提到的字符串(一定要 \" 和其他特殊字符),然后复制下一个字符串直到你到达一个 & 字符. 然后,您需要做的就是解析您的搜索词,而不是整个页面。遍历源代码直到到达末尾,然后在循环中进行下一次迭代。

于 2010-12-09T07:06:45.647 回答
2
static void GetGoogleWebHistory(int month, int day, int yr, string UserName, string Pass)
{
    string iURL = "http://www.google.com/history/lookup?month=" + month + "&day=" + day + "&yr=" + yr + "&output=rss";
    WebClient client = new WebClient();
    GDataCredentials gdc = new GDataCredentials(UserName, Pass);
    RequestSettings rs = new RequestSettings(Guid.NewGuid().ToString(), gdc);
    XmlDocument XDoc = new XmlDocument();
    XDoc.LoadXml(client.DownloadString(iURL));
}
于 2010-12-14T09:12:19.013 回答