【问题标题】:Web Crawler with JavaScript support in Perl?Perl 中支持 JavaScript 的网络爬虫?
【发布时间】:2012-03-22 12:40:36
【问题描述】:

我想编写一个 perl 应用程序,该应用程序将抓取一些网站并从中收集 图像链接网页。因为大多数页面使用生成 HTML 内容的 JavaScript,我需要编写一个支持 JavaScript 的准客户端浏览器,以便能够解析由 JavaScript 生成和/或修改的最终 HTML 代码。我有哪些选择?

如果可能,请发布一些实现代码或一些示例的链接。

【问题讨论】:

标签: javascript html perl browser


【解决方案1】:

【讨论】:

  • “我有什么选择?”是问题。模块列表似乎是一个很好的选项列表。
  • 这是 Perl。模块的文档中往往包含代码。
【解决方案2】:

想到的选项:

  • 您可以拥有Perl use Selenium 并让一个成熟的浏览器为您完成这项工作。

  • 您可以下载并编译 V8 或其他开源 JavaScript 引擎,并让 Perl 调用外部程序来评估 JavaScript。

  • 我认为 Perl 的 LWP 模块不支持 JavaScript,但如果您还没有这样做,您可能需要检查一下。

【讨论】:

    【解决方案3】:

    WWW::ScripterWWW::Scripter::Plugin::JavaScriptWWW::Scripter::Plugin::Ajax 插件似乎是您在不使用实际浏览器的情况下获得的最接近的插件(模块 WWW::SeleniumMozilla::MechanizeWin32::IE::Mechanize 使用真正的浏览器)。

    【讨论】:

    • 是否有像 WWW::Scripter 这样的模块支持 V8 引擎?
    【解决方案4】:

    查看Scraping pages full of JavaScript 中的完整工作示例。它使用Web::Scraper 处理HTML,使用Gtk3::WebKit 处理动态内容。然而,后一个是相当需要安装的 PITA。如果您需要抓取的页面不多(PhantomJS 获取后处理的 DOM 内容是一个有趣的选择。为此,我编写了以下脚本:

    var page = require('webpage').create(),
        system = require('system'),
        fs = require('fs'),
        address, output;
    
    if (system.args.length < 3 || system.args.length > 5) {
        console.log('Usage: phantomjs --load-images=no html.js URL filename');
        phantom.exit(1);
    } else {
        address = system.args[1];
        output = system.args[2];
        page.open(address, function (status) {
            if (status !== 'success') {
                console.log('Unable to load the address!');
            } else {
                fs.write(output, page.content, 'w');
            }
            phantom.exit();
        });
    }
    

    CPAN 上已经有类似的东西了,它是一个名为 Wight 的模块,但我还没有测试过。

    【讨论】:

      【解决方案5】:

      WWW::Mechanize::Firefox 可以与 mozrepl 一起使用,以及所有 javascript 操作。

      【讨论】:

        猜你喜欢
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 1970-01-01
        相关资源
        最近更新 更多