微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

网页抓取 – 假装Firefox而不是Phantom.js

当我尝试用Phantomjs废弃 this site时,认情况下,Phantomjs将以下标头发送到服务器:
"name":"User-Agent","value":"Mozilla/5.0 (UnkNown; Linux i686) AppleWebKit/534.34 (KHTML,like Gecko) PhantomJS/1.9.1 Safari/534.34"}

而且我获得了405“不允许”的回应.

我在Phantomjs API Reference中阅读,为了模仿一些其他浏览器的请求,我应该更改我的User-Agent值.在维基百科上我找到了我应该用来伪装成Ubuntu下的Firefox的值:

'name': 'User-Agent','value': 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:16.0) Gecko/20120815 Firefox/16.0'

Phantomjs应该把这些属性放在哪一部分?我应该在哪里插入它们 – 在page.open内或page.evaluate里面,还是在其顶部?

解决方法

其实是在page.settings.在开放前做

这是一个使用它与您链接页面的示例:

var page = require('webpage').create();
page.settings.userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/28.0.1500.71 Safari/537.36';
page.open('http://www.oddsportal.com/baseball/usa/mlb/results/page/',function() {
    window.setTimeout(function() {
        var output = page.evaluate(function() {
            return document.getElementById('tournamentTable')
           .getElementsByClassName('deactivate')[0]
           .getElementsByTagName('a')[0]
           .textContent;
        });
        console.log(output);
    },1000);
});

此示例将在表上的第一行中删除匹配名称. (其中,在这个确切的时刻是“旧金山巨人 – 波士顿红袜”)

关于你的评论,其实你可以在phantomjs下使用jquery!检查这个例子:

var page = require('webpage').create();
page.settings.userAgent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,function() {
    window.setTimeout(function() {
        page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js",function() {
            var output = page.evaluate(function () {
                return jQuery('#tournamentTable .deactivate:first a:first').text();
            });
            console.log(output);
        });
    },1000);
});

顺便说一句,为了等待,而不是在这个例子中使用的window.setTimeout,我建议你改用waitfor.js.

原文地址:https://www.jb51.cc/html/231348.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐