2011-06-13 10 views
0

特定のWebページから空白のテンプレートを生成できるように、すべてのHTML要素間のテキストをすべて無視または削除する必要があります。HTML :: TreeBuilder出力のテキストを無視するPerl

私は、PerlモジュールHTML :: TreeBuilderとHTML ::要素を使用して解析しています。

私は、ドキュメントに記載ignore_text方法を試してみましたが、それは正しい結果を提供していません。

私も同じことを行うためにPHPとDOMXPathを使うことの最大を使用してみましたが、結果は管理があまりにも面倒に思えました。正規表現は動作するかもしれませんが、私の最後の手段です。

これは私の現在のコードの一部です。非常に基本的です。ボトムはファイルに出力されます。すべてのコードが機能していますテンプレートファイルを生成できるように、フォーマットする必要があります。助けを事前に

my $url= "http://www.example.com";

my $page = get($url) or die $!; 
my $tree = HTML::TreeBuilder->new_from_content($page); 

$tree->parse_file($page); 

$tree->ignore_text; 
$tree->elementify; 

open OUTPUT, "+>".$body; 
my $output = $tree->as_HTML; 
print OUTPUT $output; 
close OUTPUT; 

ありがとう!

編集:私はこの問題を発見した - あなたは物理ファイルから解析する際に無視するテキストにのみ機能します。私はページを一時ファイルとして保存して、解析したいテキストを出力しなければなりませんでした。ファイルを削除するには、リンクの最後にunlink($ tmp)しました。私のスクリプトは、以来...読書やデータベースへの書き込み、私は一種の迷惑です、この一時ファイルを作成する必要があるたびに、以下の返信用

感謝をはるかに複雑成長してきました!

+1

代わりに、人々が将来的に恩恵を受けることができるようにソリューションを提供し、いずれかの質問を削除するか、または(あなたがして受け入れることができます)答えとしてあなたのソリューションを投稿する編集を提案する幸運。 SOの仕組みの詳細については、[FAQ](http://stackoverflow.com/faq)を参照してください。 :) –

答えて

0

あなたは非常に近いです。

あなたが真の値とのignore_textを設定する必要があるように見えます。 $tree->ignore_text(1)を呼び出してから、parse_fileを呼び出す前に必ず設定してください。

申し訳ありませんが、これは少し長いですが、私はそれが助けてくれることを願っています。ここで

は例のページなしでテストするのは難しい、新しいコードで簡単にパスです:

use strict; 
use warnings; 

use HTML::TreeBuilder; 

my $page = 'test.html'; 
my $tree = HTML::TreeBuilder->new(); 

$tree->ignore_text(1); 
$tree->parse_file($page); 
$tree->elementify; 

print $tree->as_HTML; 

が入力test.html

ここ

my $tree = HTML::TreeBuilder->new; 

$tree->ignore_text(1); 
$tree->elementify; 
$tree->parse_file($page); 

は、ローカルファイルを使用して、私の簡単なテストスクリプトです

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>title text</title> 
</head> 
<body> 
    <h1>Heading 1</h1> 
    <p>paragraph text</p> 
</body> 
</html> 

出力:

<html xmlns="http://www.w3.org/1999/xhtml"><head><title></title></head><body><h1></h1><p></body></html> 

-1

HTML :: Parserをこのタスクに使用する必要があります。それは少し多少のコード​​ですが、複雑ではありません。

関連する問題