Как извлечь заголовок HTML с помощью Perl? - PullRequest
0 голосов
/ 22 февраля 2009

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

Например, допустим, у меня есть HTML-страница, подобная этой:

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

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

$q -> h1('something');

Как я могу динамически заменить «что-то» на то, что содержится в тегах ?

Ответы [ 7 ]

7 голосов
/ 22 февраля 2009

Я бы использовал 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 голосов
/ 23 февраля 2009

HTML :: HeadParser сделает это за вас.

1 голос
/ 18 июля 2012

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

my ($title) = $test_content =~ m/<title>([a-zA-Z\/][^>]+)<\/title>/si;
1 голос
/ 29 сентября 2010
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";
1 голос
/ 22 февраля 2009

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

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

0 голосов
/ 16 февраля 2014

получить название заголовка из файла.

                    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
0 голосов
/ 22 февраля 2009

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

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

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

...