Лучший способ получить определения из Google?

Я пытаюсь сделать простую функцию, в которой пользователь может указать термин, а программа извлекает для него определение и возвращает его. Лучшая система определения, которую я знаю, - это ключевое слово Google «define» в поисковых запросах, где, если вы начинаете запрос с «define» или «define:» и т. д., он возвращает очень точные и достаточные определения. Однако я понятия не имею, как получить доступ к этой информации программно.

Новый API системы пользовательского поиска Google не показывает определения, а старый дает немного лучшие результаты, но устарел и по-прежнему не показывает те же определения, которые я вижу, когда я ищу термин в браузере.

Потерпев неудачу с Google, я обратился к Википедии, у которой есть огромный API, но я все еще не мог найти способ извлекать резюме, такие как определения Google.

Итак, мой вопрос: кто-нибудь знает, как я могу получить эту информацию из Google через API или любым другим способом?

Это старый вопрос, но он задает одно и то же. За исключением того, что данные ответы больше не применимы, поскольку словарь Google больше не существует.

Обновление: теперь я иду по пути, пытаясь извлечь определения прямо из сама страница. Теперь проблема в том, что когда я посещаю страницу в браузере (Firefox), определения отображаются, но когда я очищаю их с помощью cheerio, они нигде не отображаются на странице. Я должен упомянуть, что я очищаю страницу через nitrous.io, поэтому она отображает страницу из другого региона и работает system к той, с которой я просматриваю ее в браузере, так что, возможно, это связано с регионом. Буду изучать его дальше.

Обновление 2.0: я думаю, что, возможно, определения загружаются асинхронно, и поэтому я понятия не имею, как их очистить, потому что я никогда раньше не занимался очисткой, а я просто новичок :(

Обновление 3.0: Хорошо, теперь я думаю, что это связано не с асинхронной загрузкой, а с визуализатором страницы. Когда я загружаю это в Firefox, страница выглядит так:

введите здесь описание изображения

Однако, когда я загружаю его в IE (8), это выглядит так:

введите здесь описание изображения

У кого-нибудь есть понимание этого?


person Jazcash    schedule 17.03.2014    source источник
comment
Я также сделал это на googledictionaryapi.eu-gb.mybluemix.net.   -  person Suraj Jain    schedule 05.10.2018


Ответы (1)


Наконец добрался до ответа. Пришлось установить пользовательский агент при очистке экрана. Мой результирующий код для получения определений с помощью очистки:

var request = require('request')
  , cheerio = require('cheerio');

var searchTerm = 'test';

request({url:'https://www.google.co.uk/search?q=define+'+searchTerm,headers:{"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0"}}, function(err, resp, body){
  $ = cheerio.load(body);
    var defineBlocks = $(".lr_dct_sf_sen");
    var numOfBlocks = (defineBlocks.length < 3) ? defineBlocks.length : 3;
    for (var i=0; i<numOfBlocks; i++){
        var block = defineBlocks[i].children[1].children[0]; //font-size:small level
        process(block);

        function process (block) {
            for (var i=0; i<block.children.length; i++){
                var line = block.children[i];
                if ("style" in line.attribs){ // main text
                    exampleStr = "";
                    for (var k=0; k<line.children.length; k++){
                        exampleStr += line.children[k].children[0].data;
                    }
                    console.log(exampleStr);
                } else if ("class" in line.attribs){ // example
                    console.log("\""+line.children[1].children[0].data+"\"");
                } else { // nothing i want

                }
            }
        }
    }
});
person Jazcash    schedule 19.03.2014