3

I have a set of search queries in the size of approx. 10 millions. The goal is to collect the number of hits returned by a search engine for all of them. For example, Google returns about 47,500,000 for the query "stackoverflow".

The problem is that:

1- Google API is limited to 100 query per day. This is far from being useful to my task since I would have to get lots of counts.

2- I used Bing API but it does not return an accurate number. Accureate in the sense of matching the number of hits shown in Bing UI. Has anyone came across this issue before?

3- Issuing search queries to a search engine and parsing the html is one solution but it results in CAPTCHA and does not scale to this number of queries.

All I care about is that the number of hits and I am open for any suggestion.

4

2 回答 2

4

好吧,我真的希望有人能回答这个问题,因为这也是我有兴趣找到的东西,但由于看起来没有人会提出这些建议。

您可以设置一系列代理,每 100 个请求更改其 IP,以便您可以将 google 查询为看似不同的人(似乎需要做很多工作)。或者你可以下载维基百科并写一些东西来解析那里的数据,这样当你搜索一个词时,你可以看到它有多少页。当然,这是一个比整个网络小得多的数据集,但它应该让你开始。另一个可能的数据源是google n-gram 数据,您可以下载并解析它以查看搜索词所属的书籍和页面的数量。也许这些方法的组合可以提高任何给定搜索词的准确性。

当然,这些方法都不像你可以直接获得谷歌页面计数那样好,但可以理解的是,这是他们不想免费提供的数据。

于 2012-02-08T17:40:57.080 回答
1

我看到这是一个非常古老的问题,但我试图做同样的事情,这让我来到了这里。我将添加一些信息和我迄今为止的进展:

首先,你得到一个可能会发生巨大变化的估计的原因是搜索引擎使用概率算法来计算相关性。这意味着在查询期间,他们不需要检查所有可能的匹配项,以便以相当的置信度按相关性计算前 N 个命中。这意味着当搜索结束时,对于一个大的结果集,搜索引擎实际上并不知道点击的总数。不过,它已经看到了一个具有代表性的样本,它可以使用一些关于查询中使用的术语的统计信息来设置可能的命中数的上限。这就是为什么您只能获得大型结果集的估计值。以您获得准确计数的方式运行查询将更加计算密集。

我能做到的最好的方法是通过诱使搜索引擎查看更多结果来优化估计。为此,您需要转到结果的第 2 页,然后将 URL 中的“first”参数修改为更高。这样做可能会让你找到结果集的结尾(这对我去年有用,我敢肯定,虽然今天它只工作到前几千个)。即使它不允许您到达结果集的末尾,您也会看到随着查询引擎考虑更多命中,估计会变得更好。

我发现 Bing 以上述方式更易于使用 - 但我仍然无法获得我正在考虑的网站的确切计数。谷歌似乎在积极阻止他们引擎的这种使用,这并不奇怪。必应似乎也达到了极限,尽管它们看起来更像是缺陷。

对于我的用例,我能够使用上述技术使两个搜索引擎的估计值非常相似(Bing 为 148k,Google 为 149k)。我从谷歌获得的最高命中数是 323,而 Bing 则达到了 700——两者都非常不准确,但并不奇怪,因为这不是他们对该产品的预期用途。

如果您想为自己的网站做这件事,您可以使用搜索引擎的网站管理员工具来查看索引页数。对于其他网站,我认为您需要使用搜索引擎 API(需要付费)。

于 2020-08-31T06:19:07.813 回答