我如何使用js / coffee屏幕刮取asp页面?

时间:2011-07-02 20:22:41

标签: c# javascript screen-scraping coffeescript

我有一个网站,我想从中提取数据,而且它确实陷入了石器时代。没有Web服务,没有API,而且它是一个基于ASP / Session / table的布局页面。很难看。

我想屏幕抓它并使用js(coffeescript)自动化。我想知道这是否可行。我可以用C#和linqpad做到这一点,但后来我用正则表达式解析表(以及子表和子子表)。另外,如果我使用js或coffeescript,我会更熟悉这些语言,并且我将能够使用jQuery从DOM中提取元素。

我在这里看到两种可能性:

  • 使用C#并找到一个可以执行Jquery但C#代码
  • 的库
  • 使用coffeescript(js)并使用jquery在页面中查找我正在寻找的元素

我还想稍微自动化页面(获取下一组结果)。这仅限于个人使用 - 我不会将某人的搜索结果用于我的业务。我只是想让一个糟糕的搜索引擎做我想做的事。

3 个答案:

答案 0 :(得分:0)

我喜欢Curtain A)“使用C#并找到一个库......”

“HTML Agility Pack”可能正是您所寻找的:

http://htmlagilitypack.codeplex.com/

答案 1 :(得分:0)

我写了一个类,它允许你提供一堆url和一个代码块来擦除chrome扩展中的页面。你可以在这里找到github repo:https://github.com/jkarmel/Executor。它可以使用更多的测试,我需要处理文档,但看起来它可能就是你想要的。

以下是如何使用它来从几个不同的页面获取所有链接:

/*
* background.js by Jeremy Karmel. 
*/

URLS = ['http://www.apple.com/',
        'http://www.google.com/',
        'http://www.facebook.com/',
        'http://www.stanford.edu'];

//Function will be provided to exector to collect information
var getLinks = function() {
    var links = [];
    var numLinks = $('a');
    $links.each(function(i, val) {links.push(val.href)});
    var request = {data: links, url: window.location.href};
    chrome.extension.sendRequest(request);
}

var main = function() {
    var specForUsersTopics = {
        urls     : URLS,
        code     : getLinks,

        callback : function(results) {
            for (var url in results) {
                console.log(url + ' has ' + results[url].length + ' links.');
                var links = results[url];
                for (var i = 0; i < links.length; i++) 
                    console.log('   ' + links[i]);
            }
            console.log('all done!!!!');
        }
    };
    var exec = Executor(specForUsersTopics);
    exec.start();
}

main();

基本上,收集链接的代码将提供给执行程序实例,然后您可以使用回调中的结果执行任何操作。它可以处理冗长的url列表(~1000),它可以一次处理多个(默认== 5)。它现在不能很好地处理代码块中的错误,因此请务必测试您提供的代码。

答案 2 :(得分:0)

您可以使用Node.js,jsdom和jQuery轻松完成。请参阅this tutorial(在JavaScript中)。