Perl中支持JavaScript的Web爬网程序
Web Crawler with JavaScript support in Perl?
我想编写一个perl应用程序,该应用程序将抓取一些网站,并从这些网页收集图像和链接。因为大多数页面都使用JavaScript来生成HTML内容,所以我需要编写一个支持JavaScript的准客户端浏览器,以便解析由JavaScript生成和/或修改的最终HTML代码。我有什么选择?
如果可能,请发布一些实现代码或链接到一些示例。
有几个选项。
- Win32::IE::在Windows上机械化
- Mozilla::机械化
- WWW::机械化::Firefox
- WWW::硒
- 怀特
脑海中浮现的选项:
-
您可以让Perl使用Selenium,并让一个成熟的浏览器为您完成这项工作。
-
您可以下载并编译V8或其他开源JavaScript引擎,并让Perl调用外部程序来评估JavaScript。
-
我不认为Perl的LWP模块支持JavaScript,但如果您还没有这样做,您可能需要检查一下。
WWW::Scripter与WWW::Scripter::Plugin::JavaScript和WWW::Script er::Plugin::Ajax插件似乎是在不使用实际浏览器的情况下最接近的插件(模块WWW::Selenium、Mozilla::Mechanical或Win32::IE::Mechanical使用真实的浏览器)。
查看充满JavaScript的Scratching页面中的完整工作示例。它使用Web::Scraper处理HTML,使用Gtk3::WebKit处理动态内容。然而,后一个是相当PITA安装。如果没有那么多页面需要抓取(<1000),那么通过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的模块,但我还没有测试它。
WWW::机械化::Firefox可以与mozrepl一起使用,并具有所有javascript操作。
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 在Web应用程序中使用Highcharts javascript
- Selenium Web驱动程序和javascript
- 将下载链接从web浏览器传递给第三方应用程序
- 在web应用程序中的新搜索中重新加载搜索结果(不带jQuery)
- Web应用程序,将成员状态更新为其他成员
- 同一文本框中的验证程序CPF e CNPJ(ASP.NET web应用程序)
- web浏览器中的离线应用程序存储数据并在之后上传
- 使用Ember的Web应用程序架构.动画逻辑应该放在哪里
- 如何使用默认的网络摄像头拍摄照片并将其保存在我的c#.net web应用程序中
- c#web应用程序中的条形码打印
- 使用javascript为web应用程序自定义键盘快捷键
- Xpath对Selenium Web驱动程序无效”;Xpath未找到”;
- 使用angularjs和node.js时的Web应用程序文件夹结构
- PhpWindows 8.1版本上的Javascript web应用程序
- 是否有任何开源web应用程序具有良好的QUnit(或JSUnit)测试用例
- Project和作为web应用程序发布的多个doGet()脚本文件——需要澄清
- 无法在Windows 10 Cordova应用程序中从Web视图进行ajax调用
- 如何在应用程序>Web浏览器控件中使用Google Maps API v3 ClientID
- 启动程序web客户端