获取大量单词的Google搜索结果数量
我看到了一些和我问题相关的提问,但没有具体的答案。简单来说,我有一个很大的单词列表(超过1000个),我想知道每个单词在谷歌上能找到多少结果。
特别是,我在Stackoverflow上读到了这个讨论:如何通过谷歌搜索获取关键词的结果数量。但是,关于如何处理这么大的列表的问题仍然没有答案。
如果有人能给我一些Python代码,我会非常感激,这样我就可以尝试并编写脚本了。
2 个回答
如果我理解错了,请你原谅。看起来你的问题不是关于Python的,而是想找一个更新的、准确的频率列表,这个列表包含了特定领域(比如新闻、文学、网络聊天、科学等)中数十亿个单词的使用频率。
随着软件和处理能力的提升,比如在中文领域,有很多这样的频率列表,它们从数百万句子中筛选出大约100,000个单词。
举个例子,和其直接问谷歌相比,他们会把所有的电影字幕拿来,运行一个简单的算法来分析。
在中文中,最难的部分是确定什么算是一个“词”,因为这个概念模糊且不断变化。我想在其他主要语言中,这个问题可能会简单一些。
你可能是在提到之前问题中的这个评论:
如果谷歌拒绝了你的请求,你可以试着抓取搜索结果页面……
我强烈建议你不要这样做,特别是当你需要处理大量文字的时候。不过,为了教学的目的,这里有一段通常能用的代码:
import urllib2
import re
def results(word):
text = urllib2.urlopen('http://www.google.com/search?q=%s'%word).read()
m = re.search('About ([0-9,]+) results', text)
if m is None:
return None
else:
return int(m.group(1).replace(',', '')) # remove commas and int-ify
我说“通常”是因为,在我的测试中,我没有得到搜索结果页面,而是收到了谷歌的礼貌请求:
403. 这是一个错误。
你的客户端没有权限从这个服务器获取 URL/search?q=foo
。
我发现谷歌会拒绝我的请求,是因为我查看了请求头中的 User-Agent
。伪装 User-Agent
让这段代码正常工作是很简单的,但再次强调,请不要这样做。
另一个需要考虑的事情是,xkcd 的 Randall Munroe 提到页面上的点击计数非常不准确:http://blog.xkcd.com/2011/02/04/trochee-chart/