使用Web::Scraper提取javascript
Extracting javascript using Web::Scraper
我在使用Web::Scraper提取javascript时遇到了麻烦。下面是测试脚本:
#!/usr/bin/perl
use Modern::Perl;
use Web::Scraper;
use Data::Dumper;
my $contents = do { local $/; <DATA> };
my $scraper = scraper { process "//script", "scripts[]" => 'TEXT'; };
my $res = $scraper->scrape($contents);
say Dumper $res;
exit;
__DATA__
<html><head><title>hello</title></head>
<body>
<script type="text/javascript">
var dummy = {}
</script>
</body>
</html>
和输出:
$VAR1 = {
'scripts' => [
''
]
};
在我看来,我正在寻找脚本标签,但没有保存标签之间的内容。
在深入研究xpath之后,我找到了解决方案。
从
更改刮刀线my $scraper = scraper { process "//script", "scripts[]" => 'TEXT'; };
:
my $scraper = scraper { process "//script" => 'scripts[]' =>
scraper { process '//text()', 'script'=>'TEXT'} };
输出javascript代码:
$VAR1 = {
'scripts' => [
{
'script' => '
var dummy = {}
'
}
]
};
我不相信流程线是简洁的,但它是有效的。
尝试RAW格式
#!/usr/bin/perl --
use strict;
use warnings;
use Web::Scraper;
use Data::Dump;
my $contents = q{
<html><head><title>hello</title></head>
<body>
<script type="text/javascript">
var dummy = {}
</script>
</body>
</html>};
#~ my $scraper = scraper { process "//script", "scripts[]" => 'TEXT'; };
my $scraper = scraper { process "//script", "scripts[]" => 'RAW'; };
my $res = $scraper->scrape($contents);
dd $res;
__END__
{ scripts => ["'n var dummy = {}"] }
相关文章:
- 如何使用JavaScript提取此url的一部分
- 使用Node/Javascript提取字符串中的所有占位符
- 无法使用 JavaScript 提取 API 发布数据
- 使用 Javascript 提取复选框的值
- javascript提取句子的各个部分
- 使用 JavaScript 提取 URL 参数
- 使用 JavaScript 提取 IFrame 源代码
- 你知道一个开源的Javascript提取/正则表达式引擎吗?
- 使用 Javascript 提取整个 XML 节点内容
- Javascript - 提取跨度值
- 使用 javascript 提取 json 数组数据
- 使用 javascript 提取并浏览文件夹中.ZIP文件修改时间戳
- 仅使用javascript提取数字
- 使用javascript提取HTML
- 使用Javascript提取字符串中的数字
- 使用Javascript提取外部动态链接
- JavaScript提取并处理数组中的值
- JavaScript:提取电子邮件地址的部分并将其拆分为多个部分
- 使用正则表达式或javascript提取ID的最后一部分
- Javascript提取月份、日期和年份格式