如何获取 Google 的 Knowledge Graph "people also search for" 内容?
How to get Google's Knowledge Graph "people also search for" content?
我正在尝试在搜索结果页面上获取 Google 的 "People also search for" 内容,并且我正在使用 PhantomJS 来抓取他们的结果。但是,我需要的知识库部分没有出现在我得到的 body
中。有谁知道我该怎么做才能让我看到它?
代码如下:
var phantom = require('phantom');
phantom.create(function (ph) {
ph.createPage(function (page) {
page.open("http://www.google.com/ncr", function (status) {
console.log("opened google NCR ", status);
page.evaluate(function () { return document.title; }, function (result) {
console.log('Page title is ' + result);
page.open("https://www.google.com/search?gws_rd=ssl&site=&source=hp&q=google&oq=google", function (status) {
console.log("opened google Search Results ", status);
page.evaluate(function () { return document.body; }, function (result) {
console.log(result);
ph.exit();
});
});
});
});
});
});
PS 我必须先请求 `google.com/ncr' 强制加载 Google.Com 的结果,因为我在德国,而德语版本没有知识图谱。也许上面的请求也可以简化...
找到答案 - 必须手动将 userAgent 设置为 Chrome
修改后的代码:
var phantom = require('phantom');
phantom.create(function (ph) {
ph.createPage(function (page) {
page.set('settings.userAgent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1');
page.open("http://www.google.com/ncr", function (status) {
console.log("opened google NCR ", status);
page.evaluate(function () { return document.title; }, function (result) {
console.log('Page title is ' + result);
page.open("https://www.google.com/search?gws_rd=ssl&site=&source=hp&q=google&oq=google", function (status) {
console.log("opened google Search Results ", status);
page.evaluate(function () { return document.body; }, function (result) {
console.log(result);
ph.exit();
});
});
});
});
});
});
可能是你拿到body的时候页面的js还没有完成。尝试将其添加到您的 page.evaluate 中。
window.setTimeout( function() { <your page logic> }, 1000);
您可能需要fiddle配合时间。
您还可以通过在打开页面之后 运行 评估之前执行 page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js', function(){<your logic>});
来使用 jquery。
我正在尝试在搜索结果页面上获取 Google 的 "People also search for" 内容,并且我正在使用 PhantomJS 来抓取他们的结果。但是,我需要的知识库部分没有出现在我得到的 body
中。有谁知道我该怎么做才能让我看到它?
代码如下:
var phantom = require('phantom');
phantom.create(function (ph) {
ph.createPage(function (page) {
page.open("http://www.google.com/ncr", function (status) {
console.log("opened google NCR ", status);
page.evaluate(function () { return document.title; }, function (result) {
console.log('Page title is ' + result);
page.open("https://www.google.com/search?gws_rd=ssl&site=&source=hp&q=google&oq=google", function (status) {
console.log("opened google Search Results ", status);
page.evaluate(function () { return document.body; }, function (result) {
console.log(result);
ph.exit();
});
});
});
});
});
});
PS 我必须先请求 `google.com/ncr' 强制加载 Google.Com 的结果,因为我在德国,而德语版本没有知识图谱。也许上面的请求也可以简化...
找到答案 - 必须手动将 userAgent 设置为 Chrome
修改后的代码:
var phantom = require('phantom');
phantom.create(function (ph) {
ph.createPage(function (page) {
page.set('settings.userAgent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1');
page.open("http://www.google.com/ncr", function (status) {
console.log("opened google NCR ", status);
page.evaluate(function () { return document.title; }, function (result) {
console.log('Page title is ' + result);
page.open("https://www.google.com/search?gws_rd=ssl&site=&source=hp&q=google&oq=google", function (status) {
console.log("opened google Search Results ", status);
page.evaluate(function () { return document.body; }, function (result) {
console.log(result);
ph.exit();
});
});
});
});
});
});
可能是你拿到body的时候页面的js还没有完成。尝试将其添加到您的 page.evaluate 中。
window.setTimeout( function() { <your page logic> }, 1000);
您可能需要fiddle配合时间。
您还可以通过在打开页面之后 运行 评估之前执行 page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js', function(){<your logic>});
来使用 jquery。