Как да изградим подобни на човека заявки в търсачката?

Взаимодействам с търсачка програмно и трябва да я подмамя да мисли, че съм човек, който прави заявки, а не робот. Това включва генериране на заявки, за които изглежда правдоподобно, че всеки обикновен потребител би търсил, като "ncaa футболен график" или "Кога беше кацането на Луната?" Ще правя над хиляда от тези заявки всеки ден и търсенето на произволни думи от речник няма да се справи, тъй като това не е много типичен навик за търсене.

Досега съм измислил няколко начина за генериране на реалистични заявки:

  • Получете списък с най-добрите търсения в Google (или Yahoo или Bing и т.н.) за деня
  • Използвайте функцията за автоматично довършване на Google, като въведете произволна дума от речника, последвана от интервал и изтриете препоръчаните заявки.

Последният подход звучи така, сякаш ще включва много обратно инженерство. И с предишния подход не успях да намеря списък с повече от 80 или нещо заявки - единствените източници, които намерих, са AOL тенденции (50-100) и Google Тенденции (30).

Как мога да започна да генерирам голям набор от фрази за търсене, подобни на човека?
(За всякакви отговори, зависещи от езика: програмирам на Python)


person Ponkadoodle    schedule 08.09.2013    source източник


Отговори (1)


Въпреки че това най-вероятно нарушава TOS на 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) ви дава първите 110 заявки, които започват с a (с някои дубликати). Изстържете всяка буква до дълбочина 2 и трябва да имате тон легитимни заявки, от които да избирате.

person Blender    schedule 08.09.2013
comment
Уау, много по-лесно от очакваното. Благодаря за това. Той генерира дубликати за дълбочина › 1, въпреки че това може лесно да се коригира чрез промяна на yield suggestion на if depth == 1: yield suggestion - person Ponkadoodle; 09.09.2013