刮掉不是HTML的页面部分

时间:2018-03-27 12:01:21

标签: node.js web-scraping phantomjs

我想要抓this site。 我在Phantom上使用Node.js和Phantom.js。 这是我的代码:

var phantom = require('phantom');

var loadInProgress = false;
var url = 'http://apps.who.int/flumart/Default?ReportNo=12';

(async function() {
    const instance = await phantom.create();
    const page = await instance.createPage();

    await page.on('onResourceRequested', function(requestData) {
        console.info('Requesting', requestData.url);
    });
    await page.on('onConsoleMessage', function(msg) {
        console.info(msg);
    });
    await page.on('onLoadStarted', function() {
        loadInProgress = true;
        console.log('Load started...');
    });
    await page.on('onLoadFinished', function() {
        loadInProgress = false;
        console.log('Load end');
    });

    const status = await page.open(url);
    await console.log('STATUS:', status);

    const content = await page.property('content');
    await console.log('CONTENT:', content);

    // submit
    await page.evaluate(function() {
        document.getElementById('lblFilteBy').value = 'Country, area or territory'; //'WHO region';
        document.getElementById('lblSelectBy').value = 'Italy'; //'European Region of WHO';
        document.getElementById('lbl_YearFrom').value = '1995';
        document.getElementById('lbl_WeekFrom').value = '1';
        document.getElementById('lbl_YearTo').value = '2018';
        document.getElementById('ctl_list_WeekTo').value = '53';
        //console.log('SUBMIT:', document.getElementById('ctl_ViewReport'));
        document.getElementById('ctl_ViewReport').submit();
    });

    var result = await page.evaluate(function() {
        return document.querySelectorAll('html')[0].outerHTML; // Problem here
    });
    await console.log('RESULT:', result);

    await instance.exit();
}());

我不明白页面的这一部分(红色)是什么: enter image description here

这不是HTML,我如何刮取显示的数据?

谢谢!

编辑1

如果我转到Chrome开发者工具的“网络”标签:

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以抓住请求,请检查:

enter image description here

以蓝色标出,您需要在phantom脚本中调用自己的XHR请求,并以红色标出ajax结果。在标题选项卡中,您将看到通过POST发送到页面的表单数据

答案 1 :(得分:-1)

这很难。看看这个:Node.js web browser with JavaScript execution

基本上,你需要一个模拟具有js执行的浏览器的lib,并使用它来呈现报告,然后你可以解析它。