我正在尝试抓取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工作正常。
这里发生了什么,我错过了什么?
答案 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,谢谢您的使用!