1

我正在以编程方式与搜索引擎进行交互,我需要让它认为我是一个进行查询的人,而不是一个机器人。这涉及生成任何普通用户都可以搜索的查询,例如“ncaa 足球赛程表”或“登月是什么时候?” 我每天会进行一千多个这样的查询,并且从字典中搜索随机单词不会减少它,因为这不是一个非常典型的搜索习惯。

到目前为止,我已经想到了几种生成真实查询的方法:

  • 获取当天最热门的 google(或 Yahoo 或 Bing 等)搜索列表
  • 通过从字典中输入一个随机单词,后跟一个空格并抓取推荐的查询,从而利用 Google 的自动完成功能。

后一种方法听起来会涉及大量的逆向工程。使用前一种方法,我无法找到超过 80 个查询的列表——我发现的唯一来源是AOL 趋势(50-100) 和Google 趋势(30)。

我该如何生成大量类似人类的搜索短语?
(对于任何与语言相关的答案:我正在用 Python 编程)

4

1 回答 1

1

尽管这很可能会破坏 Google 的 TOS,但您可以轻松地抓取自动完成数据:

import requests
import json

def autocomplete(query, depth=1, lang='en'):
    if depth == 0:
        return

    response = requests.get('https://clients1.google.com/complete/search', params={
        'client': 'hp',
        'hl': lang,
        'q': query
    }).text

    data = response[response.index('(') + 1:-1]
    o = json.loads(data)

    for result in o[1]:
        suggestion = result[0].replace('<b>', '').replace('</b>', '')
        yield suggestion

        if depth > 1:
            for s in autocomplete(suggestion, depth - 1, lang):
                yield s

autocomplete('a', depth=2)a为您提供以(有一些重复)开头的前 110 个查询。将每个字母刮到 2 的深度,你应该有大量的合法查询可供选择。

于 2013-09-08T17:24:16.773 回答