使用javascript和ajax技术下载/提取网站内容

时间:2014-05-15 08:58:52

标签: javascript ajax web

我想在C#中编写一个小程序,以便以不同的方式呈现来自网站的一些数据。有系统托盘通知和不同的视图等...

所需数据在浏览器中显示为普通文本,可以复制/粘贴为文本复制到编辑器。 当我使用像wget这样的工具时,我可以下载网站的html源代码但是我注意到所需的数据是用javascript(和ajax?)隐藏的。

有没有办法从script / commandline / c#/ java或类似版本下载网站的真实内容? 某种解析数据的Javascript解释器,我将网站作为文本输出?

我如何提取数据?

感谢

编辑2:

问题解决了。 见答案。

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);
   }
});