我想在C#中编写一个小程序,以便以不同的方式呈现来自网站的一些数据。有系统托盘通知和不同的视图等...
所需数据在浏览器中显示为普通文本,可以复制/粘贴为文本复制到编辑器。 当我使用像wget这样的工具时,我可以下载网站的html源代码但是我注意到所需的数据是用javascript(和ajax?)隐藏的。
有没有办法从script / commandline / c#/ java或类似版本下载网站的真实内容? 某种解析数据的Javascript解释器,我将网站作为文本输出?
我如何提取数据?
感谢
编辑2:
问题解决了。 见答案。
答案 0 :(得分:1)
基于Webkit的浏览器(如Google Chrome或Safari)具有内置的开发人员工具。在Chrome中,您可以打开菜单 - >工具 - >开发人员工具。 “网络”选项卡允许您查看有关每个请求和响应的所有信息:
在图片的底部,您可以看到我已将请求过滤到XHR - 这些是由javascript代码发出的请求。
提示:每次加载页面时都会清除日志,在图片底部,黑点按钮,左侧清除按钮,将保留日志。
在分析请求和响应后,您可以模拟来自Web爬网程序的这些请求并提取有价值的数据。在许多情况下,获取数据比解析HTML更容易,因为该数据不包含表示逻辑,并且格式化为可以通过javascript代码访问。
Firefox有类似的扩展名,它叫做firebug。有些人会认为萤火虫更强大,但我喜欢webkit的简单性。
答案 1 :(得分:1)
最后......我制作了一个PhantomJS脚本,完全符合我的需要......
它允许登录站点然后执行javascripts以显示内容。
此外,我添加了一个命令来生成网站的屏幕截图,以便于调试。
感谢RolandKrüger和remy帮助我们找到解决方案。
可能需要稍微更改脚本,但我认为它可以提供帮助;)
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.open("http://www.somewebsite.com", function(status) {
if ( status === "success" ) {
page.evaluate(function() {
document.querySelector("input[name='MAIL_ADDRESS']").value = "mymail@gmail.com";
document.querySelector("input[name='PASSWORD']").value = "mypassword";
document.getElementsByName("LOGIN_FORM_SUBMIT")[0].click();
console.log("Login submitted!");
});
window.setTimeout(function () {
page.render('screenshot.png');
var ua = page.evaluate(function () {
return document.getElementById('AnElementIdOnMyWebsite').innerText;
});
console.log(ua);
phantom.exit();
}, 5000);
}
});