Как извлечь заголовок HTML с помощью Perl?

Есть ли способ извлечь заголовок HTML-страницы с помощью Perl? Я знаю, что он может передаваться как скрытая переменная во время отправки формы, а затем извлекаться в Perl таким образом, но мне было интересно, есть ли способ сделать это без отправки?

Как, скажем, у меня есть HTML-страница вроде этого:

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

а затем в Perl я хочу сделать:

$q -> h1('something');

Как я могу заменить "что-то" динамически тем, что содержится в тегах title >

Ответ 1

Я бы использовал 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.

Ответ 3

Мне непонятно, что вы просите. Кажется, вы говорите о чем-то, что может быть запущено в пользовательском браузере или, по крайней мере, о том, что уже загружено на html-страницу.

Если это не так, ответ URI::Title.

Ответ 4

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";

Ответ 5

Предыдущий ответ неверен, если тег заголовка HTML используется чаще, тогда это можно легко преодолеть, проверив, чтобы тег заголовка был действительным (между ними нет меток).

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

Ответ 6

получить имя названия формы.

                    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

Ответ 7

Если вы просто хотите извлечь заголовок страницы, вы можете использовать регулярное выражение. Я считаю, что это будет что-то вроде:

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

где ваша HTML-страница хранится в строке $html. В si значение s означает однострочный режим (т.е. Точка также соответствует новой строке) и i для случая игнорирования.