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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam
Pytanie jak w temacie.
Przy pomocy polecenia
curl http://pl.futbol24.com/Live/ | html2text
pobiera mi się wszystko oprócz wierszy z nazwami grających drużyn i wyników.
Offline
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
;-)
Offline
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
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)
Offline
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 znacznikamiKod:
<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
Znalazłem taki skrypt
#!/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
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:
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)
Offline
mały problemik:(
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
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
Offline
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ę
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
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)
Offline
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-perlA 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
moduł WWW::Scripter zainstalowany , teraz trzeba doinstalować do niego pluginy.
Nie wiem którą opcję wybrać:
perl -MCPAN -Mlocal::lib -e 'CPAN::install(WWW::Scripter::Plugin::JavaScript)'
czy
perl -MCPAN -Mlocal::lib -e 'CPAN::install(WWW::Scripter::Plugin::JavaScript::SpiderMonkey)'
Offline
Ja mam moduł
WWW::Scripter::Plugin::JavaScript
i na Vimeo daje radę.
Poza tym za bardzo kombinujesz, wystarczy odpalić polecenie
cpan
z roota, potem wpisać w powłoce cpan:
install WWW::Scripter::Plugin::JavaScript
Po zainstalowaniu wychodzisz z cpan poleceniem:
quit
i masz z powrotem powłokę basha.
Ostatnio edytowany przez Jacekalex (2013-09-23 17:18:59)
Offline
zainstalowałem moduł
WWW::Scripter::Plugin::JavaScript
skrypt do testu
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
:~$ 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
SOA#1
http://jacekalex.sh.dug.net.pl/rssperl
W tym skrypcie chodzi - funkcja Vimeo.
Dokładnie ten kawałek:
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)
Offline
[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
Poradziłem soboie przy pomocy phantomjs
[url]http://phantomjs.org/[/url]
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
Strony: 1
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 |