本帖最后由 523066680 于 2018-12-14 20:25 编辑
也不知道 Mojo 有没有自带更直接的方法,Mojo::DOM直接获取文本内容的时候,会自动把<br>的效果给吃掉,没有换行。
但是 这些符号是正常转换为 \xA0 了的。
目前的提取方法有点绕,Mojo::DOM提取关键节点的HTML,合并,交给 HTML::Parse 和 HTML::FormatText 去转文本,显示结果和浏览器大体一致。- =info
- 523066680/vicyang
- 2018-12
- =cut
-
- use Encode;
- use File::Slurp;
- use File::Basename;
- use Mojo::UserAgent;
- use HTML::Parse;
- use HTML::FormatText;
- STDOUT->autoflush(1);
-
- our $ua = Mojo::UserAgent->new();
- my $link = "http://www.zgshige.com/c/2018-12-13/7714634.shtml";
- #$link = "http://www.zgshige.com/c/2015-06-10/504779.shtml";
-
- $link =~/\/([^\/]+)\.\w+$/;
- my $pgname = $1;
- my $res = $ua->get( $link )->result;
- abstract( $res->dom, $pgname );
-
- sub abstract
- {
- my ( $dom, $pgname ) = @_;
- my $title = $dom->at("h3")->content;
- my $info = $dom->at(".col-md-8 .p-t-sm")->content;
- my $body = $dom->at(".m-lg")->content;
-
- # 注释
- if ( $dom->at(".col-md-8 .noteBox") ) {
- $note = $dom->at(".col-md-8 .noteBox")->all_text;
- } else {
- my $note = "";
- }
-
- my $buff = join("<br><br>", $title, $info, $body, $note);
- my $formatter = HTML::FormatText->new(leftmargin =>0);
- my $text = $formatter->format( parse_html($buff) );
-
- write_file( "${pgname}.txt" , encode('utf8', $text) );
- }
复制代码 结果看二三楼 |