我正试图使用Nightmare刮掉网页上包含的数据,因此,Electron。
代码位于我的帖子底部......
我从这个页面Awfully long url开始。
哪里有酒店房间优惠清单。 我想获得该页面第一次报价的网址 (我正在使用getOfferUrl())。
继续进行并开始我的抓取,即scrapOffer()的目的。 关键是我有非常奇怪的行为,我可以解释......
第一个问题:我必须将我的useragent设置为“Googlebot / 2.1”以允许我进入优惠页面, 因为当我没有指定任何useragent或使用我的代码没有评论的那个。 即使我有来自getOfferUrl()的相同网址,我也会留在优惠页面列表中。 但是,当我将此网址放入Chrome浏览器时,我将转到我需要访问的页面。
第二个问题:当我使用Googlebot useragent访问正确的优惠页面时。 我想,在jQuery中有一个div填充,我需要的所有信息都是空的,这是空的......为什么?
var Nightmare = require('nightmare');
let cheerio = require('cheerio');
var vo = require("vo");
var getSpecificOfferUrl = Nightmare({ show: true, height: 2400, width: 2400, zoomFactor: 1.0});
var scrap = Nightmare({ show: true, height: 2400, width: 2400, zoomFactor: 1.0});
var offer = {};
var offersListUrl = "http://www.mywebsite.url";
function getOfferUrl(offersListUrl) {
return new Promise(resolve => {
getSpecificOfferUrl
.goto(offersListUrl)
.wait(1000)
.end()
.evaluate(function() {
var newUrl = document.querySelector('.hotel_name_link').href;
return (newUrl);
})
.then(function(newUrl) {
resolve(newUrl);
})
})
}
function scrapOffer(newUrl) {
scrap
.useragent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36')
// .useragent('Googlebot/2.1')
.goto(newUrl)
.wait(3000)
.end()
.evaluate(function() {
var html = document.querySelector('#right').innerHTML;
return (html);
})
.then(function(html) {
$ = cheerio.load(html);
offer['title'] = $('h1').text().trim();
})
return Promise.resolve(offer)
}
console.log("start");
vo(getOfferUrl, scrapOffer)(offersListUrl).then(offer => {
console.log(offer);
console.log("end");
});