Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2013-09-16 12:51:02

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Witam
Pytanie jak w temacie.
Przy pomocy polecenia

Kod:

curl http://pl.futbol24.com/Live/ | html2text

pobiera mi się wszystko oprócz wierszy z nazwami grających drużyn i wyników.

Offline

 

#2  2013-09-16 18:18:31

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

html2text się średnio nadaje do parsowania strony ściąganej curlem.
Zajrzyj w kod strony, może brakujące dane pochodzą z jakiegoś innego adresu (strona www może znajdować się na kilku rożnych adresach, potem przeglądarka składa wszystkie klocki do kupy),
może też być  ten element generowany dynamicznie przez javascript lub ajax, i wtedy html2text też tego nie uchwyci.

Jak koniecznie chcesz targać dane ze stron internetowych, to ja na twoim miejscu zainteresowałbym się perlem i modulami www::mechanize do html, i www:scripter do javaskryptu i ajaxa.

Tu masz [url=http://jacekalex.sh.dug.net.pl/rssperl]przykład[/url] użycia www:mechanize do html
i www::scripter do javascirpta.

Pozdro
;-)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2013-09-16 18:48:39

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Jacekalex
Jak koniecznie chcesz targać dane ze stron internetowych, to ja na twoim miejscu zainteresowałbym się perlem i modulami www::mechanize do html, i www:scripter do javaskryptu i ajaxa.[/quote]
Gra nie warta świeczki; poza bashem nie ogarniam nic innego.
Sprawdziłem że przez przeglądarkę można pobrać całość strony, po wyświetleniu źródła strony w przeglądarce nie widzę linków do innych adresów.
Prawdopodobnie brakujące treści generowane są przez javascript.
Planowałem przy pomocy grepa za pomocą skryptu wyciągnąć wynik konkretnego spotkania w konsoli bez konieczności uruchamiania przeglądarki.

Offline

 

#4  2013-09-16 18:57:24

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Przesada, perl dużo trudniejszy od basha nie jest, a możliwości ma XXX razy większe.
Np pobierając stronę WWW::Scripter'em  możesz uzyskać kod html z wykonanym już javaskryptem czy ajaxem.

Trochę kombinowania jest, ale za to nie ma ograniczeń, jakie skutecznie "obcinają skrzydełka" w bashu.

Dokładnie nie sprawdzałem, ale wygląda na to, że to jest Twój problem:
http://pl.futbol24.com/f24/js/kscms.min.201212090205.js

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2013-09-16 19:04:31)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2013-09-17 08:18:59

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Dokładnie nie sprawdzałem, ale wygląda na to, że to jest Twój problem:
http://pl.futbol24.com/f24/js/kscms.min.201212090205.js[/quote]
Hmm.. Po pobraniu kompletnej strony z poziomu przeglądarki usunąłem plik kscms.min.201212090205.js i pobrana strona wyświetla się nawet lepiej, bo plik ten jeśli strona jest pobrana przeszkadza w prawidłowym jej wyświetleniu.
Zajrzałem do pliku strony startowej i ku memu zaskoczeniu wszystkie potrzebne mi dane znalazłem uszeregowane w jednej linijce tekstu między znacznikami

Kod:

<tbody>...</tbody>

Jeśli pobieram stronę curlem lub wgetem pomiędzy znacznikami tbody nic nie ma.

Ostatnio edytowany przez spook (2013-09-17 17:48:25)

Offline

 

#6  2013-09-22 19:16:25

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Znalazłem taki skrypt

Kod:

#!/usr/bin/env perl
use strict;
use warnings;
use WWW::Scripter;

my $URI = 'http://...';
my $w = 'WWW::Scripter'->new();
$w->use_plugin('JavaScript');
$w->get("$URI");

$w->submit_form(
    form_name => 'oss_query',
    fields => {
        c_keywords => '11gR2',
     },
);

$w->eval('next(2)');
print $w->content;

__END__

Pytanie- jak dopasować ten skrypt, by pobrał mi całą treść generowaną przez javascript ze strony
[url]http://pl.futbol24.com/Live/[/url]

Offline

 

#7  2013-09-22 20:07:31

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Zobacz w dokumentacji modułu:
http://search.cpan.org/~lxp/WWW-Scripter-0.030/lib/WWW/Scripter.pod

Ten moduł działa podobnie do www::Mechanize, w którym całą stronę wczytuje się tak:
          
   

Kod:

 my $sznurek = WWW::Mechanize->new();
       $sznurek ->agent( "$useragent" );
       $sznurek->max_redirect(0);
       $sznurek->default_header('Accept' => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
               'Accept-Language' => " pl-PL,pl;q=0.5",
               'Accept-Charset' => "ISO-8859-2,utf-8;q=0.7,*;q=0.7",
               'Accept-Encoding' => "gzip,deflate",
               'Connection' => "keep-alive", );
        $sznurek->get( $goto );
        my $strona = $sznurek->content();

Zmienna $goto - to adres strony, $strona, to cała zawartość strony html wczytana do zmiennej.
WWW::Scripter działa identycznie, tylko powinien po drodze wykonać skrypty javascirpt i do zmiennej wywalić całość.

Ostatnio edytowany przez Jacekalex (2013-09-22 20:13:25)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#8  2013-09-22 21:11:01

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

mały problemik:(

Kod:

Can't locate WWW/Scripter/Plugin/JavaScript.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /usr/local/share/perl/5.14.2/WWW/Scripter.pm line 1148.

potrzebne jakieś dowiązania?

Offline

 

#9  2013-09-22 21:28:07

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Zainstalować moduł np przez cpan, choć lepiej byłby zbudować go do paczki deb, ale tego nigdy nie robiłem.

Tu masz opis, jak się za to zabrać:
http://www.debian-administration.org/articles/78


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#10  2013-09-23 09:25:44

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Postanowiłem instalować moduły przez CPAN, ponieważ wg. mojego rozeznania jest to zalecany sposób.
Mam pytanko: jeśli pojawi mi się w konsoli prośba o konfigurację

Kod:

Sorry, we have to rerun the configuration dialog for CPAN.pm due to
some missing parameters. Configuration will be written to
 <</home/spook/.cpan/CPAN/MyConfig.pm>>


CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes]
...

odpowiadać twierdząco na wszystkie pytania?

Offline

 

#11  2013-09-23 09:33:47

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Tak.

CPAN ma tylko jedną wadę.
Po prostu robi sie bajzel przy aktualizacji Perla, trzbe wtedy ponownie instalować wszystkie moduły, a te stare gdzieś tam mogą zostać w systemie.
Wygodny graficzny interfejs do CPAN jest w [url=http://www.webmin.com/]Webminie[/url] pod hasłem Moduły Perla w zakładce  Inne (u mnie).

Ostatnio edytowany przez Jacekalex (2013-09-23 09:37:59)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#12  2013-09-23 10:55:03

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Jacekalex

CPAN ma tylko jedną wadę.
Po prostu robi sie bajzel przy aktualizacji Perla, trzbe wtedy ponownie instalować wszystkie moduły, a te stare gdzieś tam mogą zostać w systemie.[/quote]
Tu jest skrypt który dokładnie powinien odinstalować wybrany moduł
[url]http://perltricks.com/article/3/2013/3/27/How-to-cleanly-uninstall-a-Perl-module[/url]

Przy konfiguracji CPAN jako zwykły user mam pod koniec problem.

Kod:

...
...
---- Unsatisfied dependencies detected during ----
----      ETHER/local-lib-1.008018.tar.gz     ----
    ExtUtils::MakeMaker [build_requires]
Running make test
  Make had some problems, won't test
  Delayed until after prerequisites
Running make install
  Make had some problems, won't install
  Delayed until after prerequisites
Can't locate local/lib.pm in @INC (@INC contains: /home/spook/perl5/lib/perl5 /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl /home/spook) at /usr/share/perl/5.14/CPAN/FirstTime.pm line 1300.

POMOGŁO

Kod:

sudo apt-get install liblocal-lib-perl

A moduł w katalogu domowym zainstalowałem poleceniem

Kod:

perl -MCPAN -Mlocal::lib -e 'CPAN::install(WWW::Mechanize)'

Ostatnio edytowany przez spook (2013-09-23 11:50:34)

Offline

 

#13  2013-09-23 15:38:00

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

moduł WWW::Scripter zainstalowany , teraz trzeba doinstalować do niego pluginy.
Nie wiem którą opcję wybrać:

Kod:

perl -MCPAN -Mlocal::lib -e 'CPAN::install(WWW::Scripter::Plugin::JavaScript)'

czy

Kod:

perl -MCPAN -Mlocal::lib -e 'CPAN::install(WWW::Scripter::Plugin::JavaScript::SpiderMonkey)'

Offline

 

#14  2013-09-23 17:17:11

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Ja mam moduł

Kod:

WWW::Scripter::Plugin::JavaScript

i na Vimeo daje radę.

Poza tym za bardzo kombinujesz, wystarczy odpalić polecenie

Kod:

cpan

z roota, potem wpisać w powłoce cpan:

Kod:

install WWW::Scripter::Plugin::JavaScript

Po zainstalowaniu wychodzisz z cpan poleceniem:

Kod:

quit

i masz z powrotem powłokę basha.

Ostatnio edytowany przez Jacekalex (2013-09-23 17:18:59)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#15  2013-09-23 17:56:32

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

zainstalowałem moduł

Kod:

WWW::Scripter::Plugin::JavaScript

skrypt do testu

Kod:

  use WWW::Scripter;
  $w = new WWW::Scripter;
  
  $w->use_plugin('JavaScript');
  $w->get('http://www.cpan.org/');
  $w->get('javascript:alert("Hello!")'); # prints Hello!
  
  $w->use_plugin(JavaScript =>
          engine  => 'SpiderMonkey',
          init    => \&init, # initialisation function
  )

ze strony
[url]http://search.cpan.org/~sprout/WWW-Scripter-Plugin-JavaScript-0.008a/lib/WWW/Scripter/Plugin/JavaScript.pm[/url]
by sprawdzić jak zadziała
po wykonaniu

Kod:

:~$ perl test.pl 
Hello!
Can't set JavaScript engine to 'SpiderMonkey' since JE is already loaded. at /home/spook/perl5/lib/perl5/WWW/Scripter/Plugin/JavaScript.pm line 70.

Ostatnio edytowany przez spook (2013-09-23 17:58:07)

Offline

 

#16  2013-09-23 21:56:10

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

SOA#1
http://jacekalex.sh.dug.net.pl/rssperl

W tym skrypcie chodzi - funkcja Vimeo.

Dokładnie ten kawałek:
     

Kod:

  my $film =  WWW::Scripter->new(
                autocheck => 1,
                 show_progress => 1,);
  
    $film ->use_plugin(JavaScript => engine => "JE",);
    $film ->agent( "$useragent" );
    $film->max_redirect(0);

     $film->get($sznur);
        my $status = $film->status();
        if (($status >= 300) && ($status < 400)) {
        $adres = $film->response()->header('Location');
    }
       my @vlcstart = ("$odtwarzacz  \"$adres\" 2>&1>/dev/null &" );
    exec @vlcstart   or print STDERR "couldn't exec $odtwarzacz: $!";

Pozdro
;-)

Ostatnio edytowany przez Jacekalex (2013-09-23 21:58:30)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#17  2013-09-23 22:26:57

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

[b]Jacekalex[/b]
W tym skrypcie chodzi - funkcja Vimeo.[/quote]
Dziękuję
Prosiłbym jednak kogoś życzliwego o napisanie mi prostego 5-6 linijkowego skryptu, którym mógłbym przetestować poprawność działania zainstalowanego modułu WWW::Scripter, najlepiej tak bym mógł pobrać treść niedostępną dla WWW::Mechanize ze strony
[url]http://pl.futbol24.com/Live/[/url]
Przykładów na google jest bardzo mało, a moja znajomość perla na dzień dzisiejszy mizerna.

Ostatnio edytowany przez spook (2013-09-23 22:27:28)

Offline

 

#18  2013-09-24 10:29:10

  spook - Użytkownik

spook
Użytkownik
Zarejestrowany: 2013-03-26

Re: curl - jak pobrać całą treść ze strony http://pl.futbol24.com/Live/

Poradziłem soboie przy pomocy phantomjs
[url]http://phantomjs.org/[/url]

Kod:

var page = require('webpage').create();
page.open('http://pl.futbol24.com/Live/?__igp=1&liveAllGames=1', function () {
    console.log(page.content);
    phantom.exit();
});

Muszę jeszcze popracować nad skryptem by pobrać wybrany fragment strony zamiast całości.
Podejrzewam że będę musiał dojść do tego sam:)

Ostatnio edytowany przez spook (2013-09-24 13:26:55)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.008 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00091 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.143.23.38' WHERE u.id=1
0.00072 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.143.23.38', 1732611565)
0.00047 SELECT * FROM punbb_online WHERE logged<1732611265
0.00046 SELECT topic_id FROM punbb_posts WHERE id=241612
0.00006 SELECT id FROM punbb_posts WHERE topic_id=24267 ORDER BY posted
0.00067 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=24267 AND t.moved_to IS NULL
0.00005 SELECT search_for, replace_with FROM punbb_censoring
0.00097 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=24267 ORDER BY p.id LIMIT 0,25
0.00092 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=24267
Total query time: 0.00537 s