【发布时间】:2019-07-17 08:45:56
【问题描述】:
到目前为止,我一直在使用 perl 从使用 HTML::TreeBuilder 的网页中获取数据。当数据包含在meta 或div 标签中时,这是可以的;但现在我偶然发现了一个我不会爬的新结构,虽然它看起来很简单。
<html lang="en">
<body>
<script type="text/javascript">
panel.web.bootstrapData = {
"data": {
"units": "kW",
"horsePower": 100.00
}
};
</script>
</body>
</html>
该示例显示了我从网络获取的内容的相关部分。我想获取units 和horsePower 的值。
目前我使用的代码片段:
use strict;
use LWP::UserAgent;
use HTTP::Request::Common;
use HTML::TreeBuilder;
[...]
$reply = $ua->get($url, @ns_headers);
# printing the reply would get us the first code snippet.
print $reply->content;
unless ($reply->is_success) {
[...]
}
my $tree = HTML::TreeBuilder->new_from_content($reply->content);
my @unit_array = $tree -> look_down(_tag=>'meta','itemprop'=>'unit');
my $unit = $unit_array[0]->attr('content');
[...]
任何人都知道如何获取相关数据以及我是否应该使用HTML::TreeBuilder以外的东西?我通过stackoverflow和网络搜索没有发现任何类似的案例。
【问题讨论】:
-
这是一个非常不同的问题。您打算做的是解析/抓取 JavaScript 代码,而不是 HTML。
script标签的内容是一个 JS 程序,恐怕你必须用完全不同的方法来解析。 -
@JesusAlonsoAbad 我同意一般情况下确实如此。但 OP 示例清楚地表明,他的源数据在
<script>标签中嵌入了 JSON 字符串。 -
感谢您的 cmets。在我的情况下,Stefan 的解决方案非常有效。
标签: html perl web-scraping web-crawler