如何构建类似人类的搜索引擎查询?

时间:2013-09-08 02:26:46

标签: search web-scraping bots google-search search-engine-bots

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

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

  • 获取当天热门谷歌(或雅虎或必应等)搜索的列表
  • 使用Google的自动填充功能,输入字典中的随机单词,后跟空格并抓取推荐的查询。

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

我怎样才能生成大量类似人类的搜索词组? (对于任何依赖于语言的答案:我用Python编程)

1 个答案:

答案 0 :(得分:1)

虽然这很可能会破坏Google的服务条款,但您​​可以轻松删除自动填充数据:

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的深度,你应该有大量合法的查询可供选择。