【问题标题】:how can I use js/coffee to screen scrape an asp page?如何使用 js/coffee 屏幕抓取一个 asp 页面?
【发布时间】:2011-09-27 09:56:44
【问题描述】:

我有一个网站,我想从中提取数据,但它确实停留在石器时代。没有 Web 服务,没有 API,它非常像一个基于 ASP/Session/table 的布局页面。很丑。

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

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

  • 使用 C# 并找到一个库,可以在 C# 代码中执行 Jquery 之类的操作
  • 使用coffeescript (js) 并使用jquery 在页面中查找我要查找的元素

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

【问题讨论】:

    标签: c# javascript screen-scraping coffeescript


    【解决方案1】:

    我编写了一个类,它允许您提供一堆 url 和一个代码块来抓取 chrome 扩展中的页面。你可以在这里找到 github 存储库:https://github.com/jkarmel/Executor。它可能需要更多测试,我需要处理文档,但看起来它可能是您正在寻找的。​​p>

    您将如何使用它从几个不同的页面获取所有链接:

    /*
    * 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】:

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

      “HTML 敏捷包”可能正是您正在寻找的:

      http://htmlagilitypack.codeplex.com/

      【讨论】:

      • 好建议。看起来它会做我想要的。不过,我很好奇这种事情是否可以在咖啡中完成。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 1970-01-01
        相关资源
        最近更新 更多