Hur får jag titel från en webbsida?
Hur får jag titel från en webbsida?
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?
- micke_nordin
- Inlägg: 1539
- Blev medlem: 21 aug 2008, 17:03
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Hur får jag titel från en webbsida?
Så här kan du göra lite snabbt: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?
Kod: Markera allt
lynx --source dindoman.se | grep "<title>" | sed -e 's|.*<title>||' -e 's|</title>.*||'
/Micke

Re: Hur får jag titel från en webbsida?
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.micke_nordin skrev:Så här kan du göra lite snabbt: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?dindoman.se byter du naturligtvis ut mot (en variabel med) sökvägen till den sida du vill kolla titeln på.Kod: Markera allt
lynx --source dindoman.se | grep "<title>" | sed -e 's|.*<title>||' -e 's|</title>.*||'
/Micke
- micke_nordin
- Inlägg: 1539
- Blev medlem: 21 aug 2008, 17:03
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Hur får jag titel från en webbsida?
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å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.

/Micke

-
- Inlägg: 309
- Blev medlem: 09 dec 2008, 21:34
- OS: Xubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Ort: Trelleborg
Re: Hur får jag titel från en webbsida?
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?
Om man titta på Aftonbladets sida så ser man att deras titel-tagg ser ut såhär:micke_nordin skrev: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å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.xmlstarlet som jag tror kan parsa html på riktigt.
/Micke
Kod: Markera allt
<title>
Aftonbladet: Sveriges nyhetsportal </title>
Re: Hur får jag titel från en webbsida?
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:
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?
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
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?
-
- Inlägg: 309
- Blev medlem: 09 dec 2008, 21:34
- OS: Xubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Ort: Trelleborg
Re: Hur får jag titel från en webbsida?
Öhhh, läste du mitt svar?ubot skrev:Om man titta på Aftonbladets sida så ser man att deras titel-tagg ser ut såhär:
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.Kod: Markera allt
<title> Aftonbladet: Sveriges nyhetsportal </title>

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
(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?
Öh, på dig själv gubbe.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;

Kod: Markera allt
Fatal error: Call to undefined function getTextBetweenTags() in...
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 />';
}
?>
Re: Hur får jag titel från en webbsida?
xmlstarlet är väl bara för xml, inte html, eller?micke_nordin skrev: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å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.xmlstarlet som jag tror kan parsa html på riktigt.
/Micke
-
- Inlägg: 309
- Blev medlem: 09 dec 2008, 21:34
- OS: Xubuntu
- Utgåva: 22.04 Jammy Jellyfish LTS
- Ort: Trelleborg
Re: Hur får jag titel från en webbsida?
Lycka till.ubot skrev: Öh, på dig själv gubbe.Nej, jag filar fortfarande på min andra lösning.
- micke_nordin
- Inlägg: 1539
- Blev medlem: 21 aug 2008, 17:03
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Hur får jag titel från en webbsida?
Kolla dokumentationen. För html kör du med flaggan --html eller -Hubot skrev: xmlstarlet är väl bara för xml, inte html, eller?
/Micke

Re: Hur får jag titel från en webbsida?
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.jsiei97 skrev:Lycka till.ubot skrev: Öh, på dig själv gubbe.Nej, jag filar fortfarande på min andra lösning.
- micke_nordin
- Inlägg: 1539
- Blev medlem: 21 aug 2008, 17:03
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Hur får jag titel från en webbsida?
Ja du har inte lagt in funktionen getTextBetweenTags i din kod. Om du gör så här så funkar det:ubot skrev: Finns det något enkelt sätt att få php-koden att fungera utan error?
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 />';
}
?>

Re: Hur får jag titel från en webbsida?
Ok, as simple as that alltså.micke_nordin skrev:Ja du har inte lagt in funktionen getTextBetweenTags i din kod. Om du gör så här så funkar det:ubot skrev: Finns det något enkelt sätt att få php-koden att fungera utan error?/MickeKod: 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 />'; } ?>

Re: Hur får jag titel från en webbsida?
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:
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;
}
?>
-
- Inlägg: 6191
- Blev medlem: 14 jan 2007, 19:31
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Stockholm
Re: Hur får jag titel från en webbsida?
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?
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?Lars skrev:Kör resultatet genom tr -d \\r\\n för att få allt på en rad.