/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
hvordan læser jeg en html side på en anden~
Fra : Simon...


Dato : 25-01-03 18:17

Hej,

jeg er ved at lære lidt perl, og laver derfor en cgi der skal læse en html
side fra en anden server http://www.guden.dk/index.html

og derefter gemme den på den lokale server, og lede efter ting i filen -
eller lede efter ting i filen (tekstrenge) direkte fra den anden server,
uden at gemme filen lokalt, men kun gemme det der skal bruges.

jeg er helt nybegynder i perl, men kan java hvis det hjælper, men ellers vil
det være værdsat hvis det er skåret ud i pap, og MEGET gerne med et kode
eksempel.

jeg har ledt lidt på google, men er ikke helt sikker på hvad jeg skal lede
efter.

1000 tak for hjælpen,

mvh.Simon



 
 
Peter Makholm (25-01-2003)
Kommentar
Fra : Peter Makholm


Dato : 25-01-03 18:20

"Simon..." <devnull@linux.org> writes:

> og derefter gemme den på den lokale server, og lede efter ting i filen -
> eller lede efter ting i filen (tekstrenge) direkte fra den anden server,
> uden at gemme filen lokalt, men kun gemme det der skal bruges.

Du skal bruge modulet LWP::Simple

use LWP:Simple;
$content = get("http://www.guden.dk/index.html")

Så ligger indholdet i variablen $content.

--
Peter Makholm | There are 10 kinds of people. Those who count in
peter@makholm.net | binary and those who don't
http://hacking.dk |

Simon... (25-01-2003)
Kommentar
Fra : Simon...


Dato : 25-01-03 18:54


> Du skal bruge modulet LWP::Simple
>
> use LWP:Simple;
> $content = get("http://www.guden.dk/index.html")
>
> Så ligger indholdet i variablen $content.

mange tak, havde ikke drømt om det var så nemt :)
der skulle bare lige en eval{} udenom så virkede det.

mange tak

mvh.Simon



Simon... (25-01-2003)
Kommentar
Fra : Simon...


Dato : 25-01-03 20:59


> Så ligger indholdet i variablen $content.

hvis så jeg skal søge efter fx. 'href="' i $content og så hente det der
kommer efter det indtil næste " tegn, har du så et forslag til dette ?

og skal man betragte denne $content variabel som en string ?

tak

mvh.Simon



Henrik Tougaard (27-01-2003)
Kommentar
Fra : Henrik Tougaard


Dato : 27-01-03 08:49

Simon... wrote:

>
>> Så ligger indholdet i variablen $content.
>
> hvis så jeg skal søge efter fx. 'href="' i $content og så hente det der
> kommer efter det indtil næste " tegn, har du så et forslag til dette ?
>
Prøv med HTML::LinkExtor (se
http://search.cpan.org/author/GAAS/HTML-Parser-3.27/lib/HTML/LinkExtor.pm)


Eksempel (klippet direkte fra dokumentationen):
use LWP::UserAgent;
use HTML::LinkExtor;
use URI::URL;

$url = "http://www.perl.org/"; # for instance
$ua = LWP::UserAgent->new;

# Set up a callback that collect image links
my @imgs = ();
sub callback {
my($tag, %attr) = @_;
return if $tag ne 'img'; # we only look closer at <img ...>
push(@imgs, values %attr);
}

# Make the parser. Unfortunately, we don't know the base yet
# (it might be diffent from $url)
$p = HTML::LinkExtor->new(\&callback);

# Request document and parse it as it arrives
$res = $ua->request(HTTP::Request->new(GET => $url),
sub {$p->parse($_[0])});

# Expand all image URLs to absolute ones
my $base = $res->base;
@imgs = map { $_ = url($_, $base)->abs; } @imgs;

# Print them out
print join("\n", @imgs), "\n";


> og skal man betragte denne $content variabel som en string ?

Tja... Prøv fx. at RTFM (fx på
http://search.cpan.org/author/GAAS/libwww-perl-5.69/lib/LWP/Simple.pm -
brug i det hele taget http://search.cpan.org og http://perldoc.com til at
lære mere om moduler, CPAN og alt det andet spændende).

Desunde bør du læse "Learning Perl" (http://www.oreilly.com/catalog/lperl3)
og/eller "Perl Programming" (http://www.oreilly.com/catalog/pperl3) samt da
du skal bruge LWP: "Perl & LWP" (http://www.oreilly.com/catalog/perllwp).
Der er en liste over gode Perl bøger og anden god Perl information på
http://perl.oreilly.com/.

God fornøjelse med Perl kodning.

Henrik

Peter Makholm (25-01-2003)
Kommentar
Fra : Peter Makholm


Dato : 25-01-03 21:05

"Simon..." <devnull@linux.org> writes:

> hvis så jeg skal søge efter fx. 'href="' i $content og så hente det der
> kommer efter det indtil næste " tegn, har du så et forslag til dette ?

Du skal bruge et regulært udtryk. Tænk på at [^"] vil matche alle tegn
undtagen "

> og skal man betragte denne $content variabel som en string ?

Ja.

--
Peter Makholm | What if:
peter@makholm.net | Tannenbaum had convinced Linus that his
http://hacking.dk | operating system really was obsolete

Simon... (26-01-2003)
Kommentar
Fra : Simon...


Dato : 26-01-03 16:41


> > hvis så jeg skal søge efter fx. 'href="' i $content og så hente det der
> > kommer efter det indtil næste " tegn, har du så et forslag til dette ?
>
> Du skal bruge et regulært udtryk. Tænk på at [^"] vil matche alle tegn
> undtagen "

jeg er ikker helt sikker på havd du mener, har du et eksempel ? jeg har
fundet ud af at fx. finde hvor mange gane et eller andet ord er i en string,
men kan ikke helt se hvordan jeg får det efterfølgende ud... ?


og hvis jeg nu vil køre denne string igennem et tegn af gangen indtil den
slutter, er der så en måde dette kan gøres på ? i java kunne man fx sige "a
= string.charAt(i)" eller noget i den retning, er det muligt (og hvordan) i
perl ?

mange tak

mvh.Simon




Adam Sjøgren (26-01-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 26-01-03 18:19

On Sun, 26 Jan 2003 16:40:59 +0100, Simon wrote:

>> Du skal bruge et regulært udtryk. Tænk på at [^"] vil matche alle
>> tegn undtagen "

> jeg er ikker helt sikker på havd du mener, har du et eksempel ?

Du må hellere læse en introduktion til Perl - f.ex. en af O'Reillys
bøger, eller find en tutorial du kan læse. FAQ'erne er også gode.

> og hvis jeg nu vil køre denne string igennem et tegn af gangen
> indtil den slutter, er der så en måde dette kan gøres på ?

Havde du forventet at svaret på dette var "Nej"?

$ perldoc -f substr

> i java kunne man fx sige "a = string.charAt(i)" eller noget i den
> retning, er det muligt (og hvordan) i perl ?

asjo@virgil$ perl -e '$s="abcdefg"; print substr($s, 5, 1), "\n";'
f
asjo@virgil$

Selvfølgelig er der andre måder at gøre det på:

asjo@virgil$ perl -e '$s="abcdefg"; $a=(split("", $s))[5]; print $a, "\n"'
f
asjo@virgil$

.... og sikkert en masse andre smartere måder.


Hvis du vil løbe alle tegn igennem er her en af mange måder:

asjo@virgil$ perl -e '$s="abcdefg"; map { print "$_\n" } split "", $s;'
a
b
c
d
e
f
g
asjo@virgil$


Mvh.

--
"Ett, två, tre, pang på rödbetan." Adam Sjøgren
asjo@koldfront.dk

Simon... (28-01-2003)
Kommentar
Fra : Simon...


Dato : 28-01-03 20:08

tak igen allesammen.
mvh.Simon



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste