我正在使用 Perl 连接到站点,解析其 HTML 并提取标签之间的 innerHTML。在尝试高级概念之前,我先尝试更简单的概念。
我使用 LWP::UserAgent 向站点发送我的 HTTP GET 请求并接收我的响应。
我将响应存储在数组中,如下所示:
@res = ($ua->request($req))->content;
编辑:要解析的 HTML:
<div class="new"> this is Line 1 </div>
<div>
this is Line 2 </div>
现在,我解析 HTTP 响应中的每一行并提取标签之间的文本:
foreach $line(@res)
{
chomp $line;
if($line =~ /<div[^>]*?>(.*)<\/div>/)
{
$match = $1;
print OUTPUT $match."\n";
}
}
上述代码片段的问题是:
它只匹配第一个成功匹配的 innerHTML。它不会打印所有成功的匹配项。我不知道为什么,循环应该按照我的方式工作。每次成功匹配后,变量 $match 的值都应该被捕获缓冲区的内容覆盖。
如果标签跨越多行,它将无法提取 innerHTML 之间的文本。第一行有开始 div 标签,下一行有 innerHTML ,下一行有结束 div 标签。
我无法在这篇文章中编写 HTML,所以给出了描述。
任何帮助,将不胜感激。