我目前正在编写一个从体育网站收集信息的程序。 (它包含一些篮球比赛的历史)问题是该网站使用Angular.js进行动态HTML绑定。因此,HTML源代码涉及许多变量。
我需要找出变量的值,以便让我的程序按我的意愿工作。有没有可以帮助我的图书馆或框架?
编辑:我不受任何限制,但我更喜欢Web应用程序(MEAN,带有node-webkit的JS框架)。如果无法完成,我也可以用C ++或Java编写代码(或者使用NDK或SDK将其扩展到Android)
免责声明:这不是灰帽子的东西。我只需要做一些网络抓取。
答案 0 :(得分:1)
PhantomJS是一个无头浏览器。它允许您使用JavaScript来获取所需的信息。
详细说明:
它将浏览到您想要的页面,像任何浏览器一样执行JavaScript,并且可以访问该页面,就像使用普通浏览器向普通用户显示一样。使用JavaScript DOM遍历,您将能够获得所需的信息。这与在浏览器中打开控制台并执行将从页面获取信息的javascript自动化任务几乎相同。
虽然以下示例非常简单,但它可以做的不仅仅是获取页面结果...它可以单击按钮,导航到其他页面,仅提取相关信息,将页面提取为图像...毫不犹豫地提及其Quick start documentation以了解更多信息。
示例脚本在等待10秒后AngularJS完成计算页面后返回完整的HTML页面:
命令行用法:phantomjs-1.9.1 this_script.js
this_script.js(PhantomJS 2.0在某些情况下可能有不同的语法):
var url = phantom.args[0]
function getDocumentElementAsHTML(page) {
return page.evaluate(function() {
return document.documentElement.innerHTML
})
}
var page = new WebPage()
page.settings.userAgent = "PhantomJS"
//page.onConsoleMessage = function (msg) { console.log(msg); }
page.open(url, function (status) {
if (status !== 'success') {
console.log('Unable to access network')
phantom.exit()
} else {
setTimeout(function(){
console.log(getDocumentElementAsHTML(page))
phantom.exit()
},10000)
}
});
PS:等待10秒并不总是一个很好的解决方案,我曾经定期测试我想要获取信息的元素的存在,以确保JavaScript完成加载。
来源:我过去做的灰帽子事件
答案 1 :(得分:1)
我说你想看看http://phantomjs.org/,http://www.slimerjs.org/和/或http://casperjs.org/。
幻影& Slimer分别为您提供对Webkit和Gecko的API访问。 Casper在顶部添加了更加用户友好的API。