无法通过PhantomJS抓取特定网页

时间:2016-08-04 01:13:13

标签: javascript web-scraping phantomjs

我正在尝试使用phantomJS的简单代码,但没有运气。

var page = new WebPage();
var system = require('system');
var site=system.args[1];
var page = require('webpage').create();

page.onError = function (msg, trace) 
{
    console.log(msg);
    trace.forEach(function(item) {
    console.log(' ', item.file, ':', item.line);
})
}
page.open("https://www.mightydeals.co.uk/Products/all/National/Grey-    
Small/132212", function(){

var p=page.evaluate(function(){
return [].map.call(document.querySelectorAll('#productInformation'),    

function(link) {
        return link.innerText;
    });
    }); 
     console.log(p);
 });
phantom.exit();
});

页面在函数的上方,我在这里代表:    Programmatic Access To Visual Basic Project Is Not Trusted - Excel

我只收到错误和空输出。

我需要获得产品说明,但不提供任何描述,只有错误。

我可以通过控制台看到该页面有错误

未捕获的SyntaxError:意外的标记<

页面错误导致问题或其他任何问题,请建议/建议。

1 个答案:

答案 0 :(得分:1)

默认的PhantomJS请求(没有标头设置)被解释为某些页面的移动设备。在这种情况下,当您致电page.open时,请求的网址会重定向到http://m.mightydeals.co.uk/index.html#dealList/productId=132212&menu1Id=1&menu2Id=0&,其中没有任何#productInformation元素。

您可以在page.render('page.png')回调中和page.open之前使用page.evaluate(将截取屏幕截图)检查此行为。

快速解决此问题的方法是在page.open之前设置自定义标头。

page.customHeaders = {
    'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Firefox/42.0',
    'Accept': '*/*',
    'Accept-Language': 'nb-NO,nb;q=0.9,no-NO;q=0.8,no;q=0.6,nn-NO;q=0.5,nn;q=0.4,en-US;q=0.3,en;q=0.1',
    'Connection': 'keep-alive'
};

或在移动版页面中删除要删除的元素。