我使用HTML::TreeBuilder
通过使用tree->lookdown
提取url的内容,然后从lookdown方法中返回的字符串中提取文本部分。我这里的问题是,当我读到的文本,并将其写入一个文件显示为垃圾。在这方面我无法取得进展。
我的示例代码:
use HTML::TreeBuilder;
use HTML::Element;
use utf8;
$url = $ARGV[0];
$page = `wget -qO - "$url"| tee data.txt`;
#print "iam $pagen";
my $tree = HTML::TreeBuilder->new( );
$tree->parse_file('data.txt');
my @story = $tree->look_down(
_tag => 'div',
class => 'storydescription'
);
my @title = $tree->look_down(
_tag => 'title'
);
open(OUT,">","story.txt") or die"Cannot open story.txt:$!n";
binmode(OUT,":utf8");
foreach my $story(@story) {
print OUT $story->as_text;
}
close(OUT);
我已经尝试了输出文件句柄的binmode,但它是没有用的,Unicode以外的文本,如ascii字符正确打印到文件。
文档在HTML::TreeBuilder:
当你传递一个文件名给
parse_file
时,HTML::Parser
打开它二进制模式,这意味着它被解释为Latin-1 (ISO-8859-1)。如果文件是另一种编码,如UTF-8或UTF-16,这将不会做正确的事。一个解决方案是使用适当的
:encoding
自己打开文件层,并将文件句柄传递给parse_file
。你可以自动化这个通过在IO::HTML
中使用"html_file"来处理,这将使用HTML5编码嗅探算法自动确定合适:encoding
图层并应用