繁体   English   中英

Perl中的Grep和Extract数据

[英]Grep and Extract Data in Perl

我将HTML内容存储在变量中。 如何提取页面中一组常用标签之间的数据? 例如,我对数据感兴趣(由DATA表示保持在一行标记之间,一行接一行:

...
<td class="jumlah">*DATA_1*</td>
<td class="ud"><a href="">*DATA_2*</a></td>
...

然后我想在散列中存储映射DATA_2 => DATA_1

既然它是HTML我觉得这对你有用吗?

https://metacpan.org/pod/XML::XPath

XPath就是这样。

使用HTML解析模块,如此Q -HTML :: TreeBuilder或HTML :: Parser的答案中所述。

从理论上讲,你可以尝试使用正则表达式来做到这一点,但正如链接问题的答案和无数次在SO上所述,使用RegEx解析HTML是一个带有大写字母的坏主意 - 太容易出错,太难获得好吧,不可能100%正确,因为HTML不是常规语言。

您可以尝试这个模块: HTML::TreeBuilder::XPath 医生说:

此模块将典型的XPath方法添加到HTML :: TreeBuilder,以便于查询文档。

因为它是HTML,你可能想要使用XPath模块来处理HTML, HTML :: TreeBuilder :: XPath

首先,您需要使用HTML :: TreeBuilder方法解析字符串。 假设您的网页内容位于名为$content的变量中,请执行以下操作:

my $tree = HTML::TreeBuilder->new;
$tree->parse_file($file_name);

现在,您可以使用XPath表达式在您关注的节点上获取迭代器。 第一个表达式获取html元素body tabletr所有td节点:

my $tdNodes = $tree->findnodes('/html/body/table/tr/td');

最后,您可以遍历循环中的所有节点以查找所需内容:

foreach my $node ($tdNodes->get_nodelist) {
  my $data = $node->findvalue('.'); // the content of the node
  print "$data\n";
}

有关其方法的更多信息,请参阅HTML :: TreeBuilder文档;有关如何使用NodeSet结果对象的NodeSet文档,请参阅。 w3schools 在这里有一个可通过的XPath教程。

有了这一切,你应该能够进行相当强大的HTML解析来获取你想要的任何元素。 您甚至可以在XPath查询中指定类,ID等,以确定您想要的节点。 在我看来,使用这个修改过的XPath库解析HTML比处理一堆一次性正则表达式要快得多,而且更易于维护。

使用 grep 从<div>容器标签</div><div id="text_translate"><p>我有一个页面,其中包含不同作者的许多帖子。 我想要来自该帖子页面的用户 A 的帖子。</p><p> 如何设置 grep 以查看作者页面中每个帖子的 html 块,然后将帖子的内容打印到文件中? 帖子结构类似于</p><pre>&lt;;--Begin Msg Number #####--&gt; [useless junk i'm not interested in here] &lt;span class="author vcard"&gt;&lt;a class="url fn" href='url here'&gt;User A&lt;/a&gt;&amp;nbsp;&lt;/span&gt; [more junk] &lt;div class='post entry-content '&gt; &lt;!--cached-some date string--&gt; Here's the text I want to extract &lt;/div&gt; [more junk] &lt;hr /&gt;</pre><p> 我认为结构类似于</p><pre>grep /pattern/ output file</pre><p> 但我是否需要明确告诉它只在</p><pre>&lt;.-- begin msg... --&gt;</pre><p> 和</p><pre>&lt;hr /&gt;</pre><p> 绑定帖子的标签,还是 grep 足够智能以自动执行此操作? 我担心当 grep 找到用户 A 的模式时,它会将所有帖子内容打印到一个文件中,而不仅仅是那个特定的。</p></div>

[英]Using grep to extract html from <div> container tags

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用Perl提取HTML表数据? 如何从 Perl 中的 HTML 表中提取数据? 如何使用sed,awk或grep从HTML表格单元格中提取数据? Perl快速HTML提取 使用 sed 或 grep 提取 HTML 标签之间的文本 如何仅使用 grep 提取 bash 中的 html 标签 grep从HTML提取正则表达式href和rel 使用 grep 从<div>容器标签</div><div id="text_translate"><p>我有一个页面,其中包含不同作者的许多帖子。 我想要来自该帖子页面的用户 A 的帖子。</p><p> 如何设置 grep 以查看作者页面中每个帖子的 html 块,然后将帖子的内容打印到文件中? 帖子结构类似于</p><pre>&lt;;--Begin Msg Number #####--&gt; [useless junk i'm not interested in here] &lt;span class="author vcard"&gt;&lt;a class="url fn" href='url here'&gt;User A&lt;/a&gt;&amp;nbsp;&lt;/span&gt; [more junk] &lt;div class='post entry-content '&gt; &lt;!--cached-some date string--&gt; Here's the text I want to extract &lt;/div&gt; [more junk] &lt;hr /&gt;</pre><p> 我认为结构类似于</p><pre>grep /pattern/ output file</pre><p> 但我是否需要明确告诉它只在</p><pre>&lt;.-- begin msg... --&gt;</pre><p> 和</p><pre>&lt;hr /&gt;</pre><p> 绑定帖子的标签,还是 grep 足够智能以自动执行此操作? 我担心当 grep 找到用户 A 的模式时,它会将所有帖子内容打印到一个文件中,而不仅仅是那个特定的。</p></div> 从Perl中的HTMl / XML标记中提取文本 使用Perl提取脚本类型html /文本
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM