簡體   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