【问题标题】:How to build human-like search-engine queries?如何构建类似人类的搜索引擎查询?
【发布时间】:2013-09-09 10:32:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案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 的深度,您应该有大量合法查询可供选择。

    【讨论】:

    • 哇,比预期的要容易得多。谢谢你。它会为深度 > 1 生成重复项,但可以通过将 yield suggestion 更改为 if depth == 1: yield suggestion 轻松解决此问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    相关资源
    最近更新 更多