如何使用Perl提取HTML标题?

时间:2009-02-22 02:41:22

标签: html perl title

有没有办法使用Perl提取HTML页面标题?我知道它可以在表单提交期间作为隐藏变量传递,然后以Perl方式检索,但我想知道是否有一种方法可以在没有提交的情况下执行此操作?

喜欢,假设我有一个这样的HTML页面:

<html><head><title>TEST</title></head></html>

然后在Perl中我想做:

$q -> h1('something');

如何使用&lt; title&gt;中包含的内容动态替换'something'?标签

7 个答案:

答案 0 :(得分:7)

我会使用pQuery。它就像jQuery一样工作。

你可以说:

use pQuery;
my $page = pQuery("http://google.com/");
my $title = $page->find('title');
say "The title is: ", $title->html;

替换内容类似:

$title->html('New Title');
say "The entirety of google.com with my new title is: ", $page->html;

您可以将HTML字符串传递给pQuery构造函数,这听起来像是您想要做的。

最后,如果您想将任意HTML用作“模板”,然后使用Perl命令“优化”,则需要使用Template::Refine

答案 1 :(得分:3)

HTML::HeadParser为你做这件事。

答案 2 :(得分:1)

我不清楚你在问什么。您似乎在讨论可以在用户的​​浏览器中运行的内容,或者至少已经加载了html页面的内容。

如果,则答案为URI::Title

答案 3 :(得分:1)

use strict;
use LWP::Simple;

my $url = 'http://www.google.com'|| die "Specify URL on the cmd line";
my $html = get ($url);
$html =~ m{<TITLE>(.*?)</TITLE>}gism;

print "$1\n";

答案 4 :(得分:1)

之前的答案是错误的,如果更频繁地使用HTML标题标签,那么可以通过检查以确保标题标签有效(中间没有标签)来轻松克服这一点。

my ($title) = $test_content =~ m/<title>([a-zA-Z\/][^>]+)<\/title>/si;

答案 5 :(得分:0)

从文件中获取标题名称。

                    my $spool = 0;

                    open my $fh, "<", $absPath or die $!; 
                    #open ($fh, "<$tempfile" );
                    # wrtie the opening brace
                    print WFL "[";
            while (<$fh>) {
                    # removes the new line from the line read
                        chomp;
                    # removes the leading and trailing spaces.
                    $_=~ s/^\s+|\s+$//g;
            # case where the <title> and </title> occures in one line
            # we print and exit in one instant
                if (($_=~/$startstring/i)&&($_=~/$endstring/i)) {

                        print WFL "'";

                    my ($title) = $_=~ m/$startstring(.+)$endstring/si;
                        print WFL "$title";
                        print WFL "',";
                        last;
                        }
            # case when the <title> is in one line and </title> is in other line

            #starting <title> string is found in the line
                elsif ($_=~/$startstring/i) {

                        print WFL "'";
            # extract everything after <title> but nothing before <title>       
                    my ($title) = $_=~ m/$startstring(.+)/si;
                        print WFL "$title";
                        $spool = 1;
                        }
            # ending string </title> is found
                elsif ($_=~/$endstring/i) {
            # read everything before </title> and nothing above that                                
                    my ($title) = $_=~ m/(.+)$endstring/si;
                        print WFL " ";
                        print WFL "$title";
                        print WFL "',";
                        $spool = 0;
                        last;
                        }
            # this will useful in reading all line between <title> and </title>
                elsif ($spool == 1) {
                        print WFL " ";
                        print WFL "$_";

                        }

                    }
        close $fh;
        # end of getting the title name

答案 6 :(得分:-2)

如果您只想提取页面标题,可以使用正则表达式。我相信会是这样的:

my ($title) = $html =~ m/<title>(.+)<\/title>/si;

您的HTML页面存储在字符串$html中。在si中,s代表单行模式(即点也匹配换行符)和i代表忽略大小写