刮刮谷歌词典

时间:2018-02-01 20:33:10

标签: javascript node.js web-scraping user-agent cheerio

我正在尝试抓取Google字典并创建一个非官方的API。我尝试使用cheerio和node.js的请求包来实现这个功能。

这是我的代码:

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

request({
    method: 'GET',
    url: 'https://www.google.co.in/search?q=define+love'
}, function(err, response, body) {

    if(err){
        return console.error(err)
    }


    var $ = cheerio.load(body);

    var a = $(".vk_ans span").text();
    console.log(a);

});

我最初试图废弃这个页面“https://www.google.co.in/search?q=define+love”,我试图废弃大胆的 love ,它是用div {{1}编写的div }。

但是当我vk_ans得到答案时,它会产生一条空行,其他所有地方我都在做同样的事情而且Cheerio工作正常。

这里发生了什么,我错过了什么?

2 个答案:

答案 0 :(得分:1)

您需要一个用户代理标头,以便不被识别为机器人。 试试这个:

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

request({
  method: 'GET',
  url: 'https://www.google.co.in/search?q=define+love',
  headers: {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
  }
}, function(err, response, body) {

  if (err) {
    return console.error(err);
  }

  var $ = cheerio.load(body);

  var a = $(".mw").text();
  console.log(a);

});

答案 1 :(得分:1)

道歉将此作为答案发布,但我的帐户是新的,不能post comments。我一直在使用你的API并且给我留下了深刻印象,但是,遇到了一个真正有问题的问题。

搜索“fish”一词会返回此定义a flat plate that is fixed on a beam or across a joint in order to give additional strength.

似乎它正在使用谷歌提供的第二个定义,而不是第一个更相关的定义。修复此功能非常有用,并且可以让我继续使用您的API,谢谢您的使用!