使用NightmareJS进行抓取时出现奇怪的行为 - 需要进行解释

时间:2017-03-13 17:13:44

标签: javascript jquery html nightmare

我正试图使用​​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");
});

0 个答案:

没有答案