Sida 1 av 1

Hur får jag titel från en webbsida?

Postat: 25 sep 2009, 21:16
av ubot
Jag har försökt med curl, lynx -source, grep, sed, awk mm för att hämta titeln på en webbsida, men det var knepigare än jag trodde. Hur gör jag för att se vilken titel en webbisa med en speciell URL har, dvs informationen som finns mellan title-taggarna i webbsidans kod?

Re: Hur får jag titel från en webbsida?

Postat: 25 sep 2009, 22:25
av micke_nordin
ubot skrev:Jag har försökt med curl, lynx -source, grep, sed, awk mm för att hämta titeln på en webbsida, men det var knepigare än jag trodde. Hur gör jag för att se vilken titel en webbisa med en speciell URL har, dvs informationen som finns mellan title-taggarna i webbsidans kod?
Så här kan du göra lite snabbt:

Kod: Markera allt

lynx --source dindoman.se | grep "<title>" | sed -e 's|.*<title>||' -e 's|</title>.*||'
dindoman.se byter du naturligtvis ut mot (en variabel med) sökvägen till den sida du vill kolla titeln på.

/Micke

Re: Hur får jag titel från en webbsida?

Postat: 25 sep 2009, 22:47
av ubot
micke_nordin skrev:
ubot skrev:Jag har försökt med curl, lynx -source, grep, sed, awk mm för att hämta titeln på en webbsida, men det var knepigare än jag trodde. Hur gör jag för att se vilken titel en webbisa med en speciell URL har, dvs informationen som finns mellan title-taggarna i webbsidans kod?
Så här kan du göra lite snabbt:

Kod: Markera allt

lynx --source dindoman.se | grep "<title>" | sed -e 's|.*<title>||' -e 's|</title>.*||'
dindoman.se byter du naturligtvis ut mot (en variabel med) sökvägen till den sida du vill kolla titeln på.

/Micke
Hm, ok, tackar. Men fungerar koden verkligen om title-taggarna ligger på två olika rader. Ibland så är inte <title> och </title> på samma rad.

Re: Hur får jag titel från en webbsida?

Postat: 26 sep 2009, 09:14
av micke_nordin
ubot skrev:
Hm, ok, tackar. Men fungerar koden verkligen om title-taggarna ligger på två olika rader. Ibland så är inte <title> och </title> på samma rad.
Ja, den funkar så länge <title> och innehållet i taggen står på samma rad, </title> kan dock stå på en annan rad. Om du vill ha en riktig parser kan du titta på xmlstarlet som jag tror kan parsa html på riktigt.

/Micke

Re: Hur får jag titel från en webbsida?

Postat: 26 sep 2009, 09:46
av jsiei97
ubot skrev: Hm, ok, tackar. Men fungerar koden verkligen om title-taggarna ligger på två olika rader. Ibland så är inte <title> och </title> på samma rad.

Man kan ju ta fram perl och lite regexp för att lösa problemet också ::)
http://xkcd.com/208/

Kod: Markera allt

#!/usr/bin/perl -w
use strict;

print "Get title v0.1\n";

my $url = "http://google.com";
print "url=$url\n";

my $tmp_page_html = "tmp.page.html";
my $page_str = "";

system("wget", "-q", $url, "-O$tmp_page_html");
if(-e $tmp_page_html)
{
    open FILE, $tmp_page_html or die( "Can\'t open file $tmp_page_html \n");
    my $i = 0;
    while (my $line = <FILE>) 
    { 
        $page_str .= $line;
    }
    close FILE;

    unlink $tmp_page_html;
}

if($page_str  =~ /<title>(.*)<\/title>/is)
{
    print "Title: ".$&."\n";
    print "Title: ".$1."\n";
}

1;

Re: Hur får jag titel från en webbsida?

Postat: 26 sep 2009, 13:07
av ubot
micke_nordin skrev:
ubot skrev:
Hm, ok, tackar. Men fungerar koden verkligen om title-taggarna ligger på två olika rader. Ibland så är inte <title> och </title> på samma rad.
Ja, den funkar så länge <title> och innehållet i taggen står på samma rad, </title> kan dock stå på en annan rad. Om du vill ha en riktig parser kan du titta på xmlstarlet som jag tror kan parsa html på riktigt.

/Micke
Om man titta på Aftonbladets sida så ser man att deras titel-tagg ser ut såhär:

Kod: Markera allt

<title>
Aftonbladet: Sveriges nyhetsportal </title>
Dvs då fungerar inte ditt förslag. Nej, det håller inte. Jag behöver en metod som är mer säker. Får kolla på xml starlet.

Re: Hur får jag titel från en webbsida?

Postat: 26 sep 2009, 13:12
av ubot
En annan lösning jag har kollat på är att köra någonting i stil med: curl -Ls http://www.expressen.se/Nyheter/1.17207 ... ill-europa | xargs echo | grep -o "title>.*"

När jag kör kommandona så får jag upp det här felmeddelandet:

Kod: Markera allt

xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
Vad är felet?

Problemet är att xarg echo fungerar bara om jag inte har en pipe till ett annat kommando efteråt. Annars gör väl echo att allt hamnar på en och samma rad, eller? Även kommandot paste gör väl något åt det hållet? Vad jag är ute efter är att låta all kod ligga på en enda rad och sedan köra typ sed eller grep för att plocka ut title-taggarna. Vad tror ni om det?

Re: Hur får jag titel från en webbsida?

Postat: 26 sep 2009, 17:01
av jsiei97
ubot skrev:Om man titta på Aftonbladets sida så ser man att deras titel-tagg ser ut såhär:

Kod: Markera allt

<title>
Aftonbladet: Sveriges nyhetsportal </title>
Dvs då fungerar inte ditt förslag. Nej, det håller inte. Jag behöver en metod som är mer säker. Får kolla på xml starlet.
Öhhh, läste du mitt svar? ???
Mitt lilla script ger följande från Aftonbladet...

Kod: Markera allt

Get title v0.1
url=http://www.aftonbladet.se/
Title: <title>
Aftonbladet: Sveriges nyhetsportal </title>
Title: 
Aftonbladet: Sveriges nyhetsportal 
Så jag ser inte ditt problem, den gör ju precis det du vill att den ska göra...?
(och om det är för mycket text, så kommentera bort alla print:ar utom den sista...)

/Johan

Re: Hur får jag titel från en webbsida?

Postat: 26 sep 2009, 17:13
av ubot
jsiei97 skrev:
ubot skrev: Hm, ok, tackar. Men fungerar koden verkligen om title-taggarna ligger på två olika rader. Ibland så är inte <title> och </title> på samma rad.

Man kan ju ta fram perl och lite regexp för att lösa problemet också ::)
http://xkcd.com/208/

Kod: Markera allt

#!/usr/bin/perl -w
use strict;

print "Get title v0.1\n";

my $url = "http://google.com";
print "url=$url\n";

my $tmp_page_html = "tmp.page.html";
my $page_str = "";

system("wget", "-q", $url, "-O$tmp_page_html");
if(-e $tmp_page_html)
{
    open FILE, $tmp_page_html or die( "Can\'t open file $tmp_page_html \n");
    my $i = 0;
    while (my $line = <FILE>) 
    { 
        $page_str .= $line;
    }
    close FILE;

    unlink $tmp_page_html;
}

if($page_str  =~ /<title>(.*)<\/title>/is)
{
    print "Title: ".$&."\n";
    print "Title: ".$1."\n";
}

1;
Öh, på dig själv gubbe. ;) Nej, jag filar fortfarande på min andra lösning. Det fungerar säkert med din metod, men jag vill ju få det att fungera med grep/sed eller awk. Tycker det är irriterande att det inte går så. Det hade varit bra med ett php-kod också, då har jag möjlighet att baka in koden i en php-fil som jag redan har. Jag har hittat en här koden, men det Terminalen klagar på:

Kod: Markera allt

Fatal error: Call to undefined function getTextBetweenTags() in...
Här är en länk till sidan som har php-koden: http://www.phpro.org/examples/Get-Text- ... -Tags.html

Kod: Markera allt

<?php

$html = '<body>
<h1>Heading</h1>
<a href="http://phpro.org">PHPRO.ORG</a>
<p>paragraph here</p>
<p>Paragraph with a <a href="http://phpro.org">LINK TO PHPRO.ORG</a></p>
<p>This is a broken paragraph
</body>';

$content = getTextBetweenTags('a', $html);

foreach( $content as $item )
{
    echo $item.'<br />';
}
?>
Finns det något enkelt sätt att få php-koden att fungera utan error?

Re: Hur får jag titel från en webbsida?

Postat: 26 sep 2009, 22:57
av ubot
micke_nordin skrev:
ubot skrev:
Hm, ok, tackar. Men fungerar koden verkligen om title-taggarna ligger på två olika rader. Ibland så är inte <title> och </title> på samma rad.
Ja, den funkar så länge <title> och innehållet i taggen står på samma rad, </title> kan dock stå på en annan rad. Om du vill ha en riktig parser kan du titta på xmlstarlet som jag tror kan parsa html på riktigt.

/Micke
xmlstarlet är väl bara för xml, inte html, eller?

Re: Hur får jag titel från en webbsida?

Postat: 27 sep 2009, 10:16
av jsiei97
ubot skrev: Öh, på dig själv gubbe. ;) Nej, jag filar fortfarande på min andra lösning.
Lycka till.

Re: Hur får jag titel från en webbsida?

Postat: 27 sep 2009, 10:43
av micke_nordin
ubot skrev: xmlstarlet är väl bara för xml, inte html, eller?
Kolla dokumentationen. För html kör du med flaggan --html eller -H

/Micke

Re: Hur får jag titel från en webbsida?

Postat: 27 sep 2009, 12:01
av ubot
jsiei97 skrev:
ubot skrev: Öh, på dig själv gubbe. ;) Nej, jag filar fortfarande på min andra lösning.
Lycka till.
Nej, men jag vill helst ha något bash-kommando, php eller kanske xmlstarlet. Din lösning är säkert bra, men först vill jag testa med programspråk som jag har lite kläm på och inte blanda in Pearl.

Re: Hur får jag titel från en webbsida?

Postat: 27 sep 2009, 15:12
av micke_nordin
ubot skrev: Finns det något enkelt sätt att få php-koden att fungera utan error?
Ja du har inte lagt in funktionen getTextBetweenTags i din kod. Om du gör så här så funkar det:

Kod: Markera allt

<?php

 function getTextBetweenTags($tag, $html)
 {
    $pattern = "/<$tag?.*>(.*?)<\/$tag>/";
    preg_match_all($pattern, $html, $matches);
    return $matches[1];   
 }

$html = '<body>
<h1>Heading</h1>
<a href="http://phpro.org">PHPRO.ORG</a>
<p>paragraph here</p>
<p>Paragraph with a <a href="http://phpro.org">LINK TO PHPRO.ORG</a></p>
<p>This is a broken paragraph
</body>';

$content = getTextBetweenTags('a', $html);

foreach( $content as $item )
{
    echo $item.'<br />';
}
?>
/Micke

Re: Hur får jag titel från en webbsida?

Postat: 27 sep 2009, 15:30
av ubot
micke_nordin skrev:
ubot skrev: Finns det något enkelt sätt att få php-koden att fungera utan error?
Ja du har inte lagt in funktionen getTextBetweenTags i din kod. Om du gör så här så funkar det:

Kod: Markera allt

<?php

 function getTextBetweenTags($tag, $html)
 {
    $pattern = "/<$tag?.*>(.*?)<\/$tag>/";
    preg_match_all($pattern, $html, $matches);
    return $matches[1];   
 }

$html = '<body>
<h1>Heading</h1>
<a href="http://phpro.org">PHPRO.ORG</a>
<p>paragraph here</p>
<p>Paragraph with a <a href="http://phpro.org">LINK TO PHPRO.ORG</a></p>
<p>This is a broken paragraph
</body>';

$content = getTextBetweenTags('a', $html);

foreach( $content as $item )
{
    echo $item.'<br />';
}
?>
/Micke
Ok, as simple as that alltså. :) Jag ska göra ett försök. Tack.

Re: Hur får jag titel från en webbsida?

Postat: 27 sep 2009, 22:51
av ubot
Det här var inte bra. Jag ser när jag testar med en länk till en sida på Aftonbladet att mitt php-skript inte tar ut titeln öht. Det som gör att det inte fungerar är att titel-taggarna är på två olika rader. Hur får jag php-skriptet att plocka titlen oavsett om titel-taggarna är på samma eller olika rader i webbsidans kod?

Här är php-koden:

Kod: Markera allt

<?php

function getTextBetweenTags($tag, $html)
{
    $pattern = "/<$tag?.*>(.*?)<\/$tag>/";
    preg_match_all($pattern, $html, $matches);
    return $matches[1];   
}

$html = file_get_contents($_ENV['var']);

$content = getTextBetweenTags('title', $html);

foreach( $content as $item )
{
    echo $item;
}
?>

Re: Hur får jag titel från en webbsida?

Postat: 27 sep 2009, 23:17
av Lars
Kör resultatet genom tr -d \\r\\n för att få allt på en rad.

Re: Hur får jag titel från en webbsida?

Postat: 28 sep 2009, 00:06
av ubot
Lars skrev:Kör resultatet genom tr -d \\r\\n för att få allt på en rad.
Ok, jag har varit inne på det förut, men utan att riktigt lyckas. Jag får göra ett försök. Det kanske fungerar med \\r och [/b], inte bara med \\n. Vad betyder \\r\\n[/b] egentligen? Och varför två (\)? Förut hade jag bara ett (\)-tecken?