wget i skryp perl, jak przekaza

Potrzebujesz pomocy z C, C++, perl, python, itp.
sznajdi
Posty: 20
Rejestracja: 01 sierpnia 2007, 15:03
Lokalizacja: Poznan

wget i skryp perl, jak przekazać plik bezpośrednio do tablicy bez zapisu na dysku

Post autor: sznajdi »

Witam.

Jak plik ściągany wgetem w skrypcie perla (np. poprzez wywołanie system) przekazać bezpośrednio do zmiennej lub tablicy w perlu.
Chciałbym pominąć zapisywanie pliku na dysku i późniejsze odczytywanie z dysku aby plik przenieść do tablicy.

Wiem, że można korzystać z LWP lub innych parserów ale pliki, które ściągam to nie zawsze html.

Będę wdzięczny za nakierowanie na jakąś funkcję, podanie koncepcji, może jakiś pomysł na rozwiązanie tego problemu?
Resztę sam znajdę z pomocą Google i napiszę.

Pozdrawiam.
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Jaki efekt chcesz uzyskać?
Nie możesz perlem 'czytać' bezpośrednio ze strumienia? Zapamiętasz sobie wtedy wynik z odczytu strumienia gdzie będziesz potrzebował.
Pobierając wget-em poprzez funkcję system możesz odczytać jedynie rezultat z wykonania polecenia (w tym wypadku wget).
sznajdi
Posty: 20
Rejestracja: 01 sierpnia 2007, 15:03
Lokalizacja: Poznan

Post autor: sznajdi »

Chcę stronę www np.

Kod: Zaznacz cały

 kernel.org/index.html
bezpośrednio z serwera http odczytać (pobrać) z pomocą[/b skryptu perla, następnie przenieść (przekazać) do tablicy aby później to co ściągnę dalej obrobić w skrypcie.

Wpadłem na pomysł,że można coś takiego zrobić za pomocą programu wget ale przy dużej ilość plików/katalogów robi się problem, bo dysk muli i zaczyna całość działać wolniej. Zastanawiam się nad ramdyskiem, pewnie da się to jakoś szybciej, efektywniej, lepiej zrobić niż zapisywać pliki na dysku wgetem.

A
jak czytać bezpośrednio ze strumienia? Czy stronę www można (i czym, ak) przekazać jako strumień?
To co ściągnie wget mam przekazywać do skryptu perla za pomocą:

Kod: Zaznacz cały

 wget... > skrypt_w_perlu.pl
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Pierwsze 4 wyniki z google pod hasłem "perl parse html page"
http://www.foo.be/docs/tpj/issues/vol5_ ... -0003.html
http://www.perl.com/pub/2006/01/19/analyzing_html.html
http://www.degraeve.com/tutorials/tutorial02.php
http://lists.xml.org/archives/xml-dev/2 ... 00283.html - to jest naprawdę rewelacja :) praktycznie w jednej linijce

Mam nadzieję, że wybaczysz mi niechęć do przepisywania treści z podanych stron :)
sznajdi
Posty: 20
Rejestracja: 01 sierpnia 2007, 15:03
Lokalizacja: Poznan

Post autor: sznajdi »

Dziękuję!

Ale:
[INDENT]- zanim napisałem post sam szukałem z pomocą Google,
- w pierwszym moim akapicie jest napisane, że nie chcę lwp,
- parsować htmla będę sam po swojemu i nie to jest problemem.[/INDENT]


Chodzi mi o to jak przekazać ściągniętą stronę www bezpośrednio do skryptu w perlu?

Na chwilę obecną robię to tak, że:
  1. Ściągam stronę za pomocą wget.
  2. Zapisaną stronę na dysku wczytuję do tablicy w skrypcie perlowym.
  3. Parsuję tablicę po swojemu.
Problem jest w tym, że strona jest zapisywana na dysku, a efektywniej byłoby ją przekazać bezpośrednio do skryptu perla aby pominąć zapisywanie na dysku.

Podpowiedziałeś mi coś o strumieniach i sprawdzę to popołudniu.

Może ktoś jeszcze ma jakieś pomysły? Będę wdzięczny za wszystkie podpowiedzi, sugestie, pomysły.
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Czyli potrzebujesz po prostu odczytać stronę www bezpośrednio w skrypcie perla :)
Można np. tak:

Kod: Zaznacz cały

# perl  use strict;
# use LWP::Simple;
use LWP::UserAgent;  
my $ua = new LWP::UserAgent; 
$ua->timeout(120); 
my $url='http://yahoo.com/'; 
my $request = new HTTP::Request('GET', $url); 
my $response = $ua->request($request); 
my $content = $response->content(); 
print $content;
Sposobów na odczyt strony bez jej pobierania jest zapewne kilkanaście.
Popatrz również do dokumentacji za opisem funkcji get.
ODPOWIEDZ