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  2014-02-22 22:48:27

  lis6502 - Łowca lamerów

lis6502
Łowca lamerów
Skąd: Stalinogród
Zarejestrowany: 2008-12-04

Masowe wyciąganie danych ze stron www

czyli coś, co mnie kręci od zawsze. O ile za młodu coś tam skrobałem z kilkoma maniakami (pozdro [b]sigo[/b]!), o tyle ja się postarzałem, a technika poszła mocno naprzód.
Ostatnimi czasy znowu naszły mnie ciągoty na rippowanie materiałów ze stron za pomocą własnych botów. Wiadomo, póki co jadę Bashem (węże w sed'dzie, dużo cut, tr, grepów, kod jest zaciemniony od fazy projektowania po wersję produkcyjną xD), ale docelowo ma to odbywać się Pythonem z jakimś dodatkiem (bo jednak chcę się rozwijać, a choćby dla własnej satysfakcji).

Przypomniałem sobie o portalu zlecenia.przez.net, pamiętam jak swego czasu znajdywalem tam różne interesujące i relatywnie proste zlecenia. Zajrzałem i dziś i postanowiłem opykać jedno 'na sucho', tzn, sprawdzić czy w ogóle podołam. Znalazłem coś ciekawego, ale przerosła mnie konfiguracja serwera www :P

link do zlecenia: http://www.zlecenia.przez.net/aukcja,118054,pozyskanie-wyciagnieci-bazy-danych-z-katalogu-firm

Spojler, czyli o co chodzi: gość chce wyciągnąć z takich linków  http://akses.com.pl/biznes,i,ekonomia/okno,pcv,warszawa,s,2451/
takie dane: P.P.U.H. INVESTBUD Leszek Wypiórkiewicz; 483701445; Sadowa; 22; 26-500; Szydłowiec; biuro@hurtokien.pl; www.hurtokien.pl; 13 04 2012
Określił, że interesują go dane z rekordów numer od do.

Se myślę: klasyczna pętelka, tu jakiś wget, tam ciachnę awkiem, do csv też napiszę jakiś wypluwacz, aż przyjrzałem się linkowi.
Tak, paskudny rewrite. i o ile wykoncypowałem jak podołać zleceniu (mapa strony, kategorie, odwiedzenie każdego linka i porównanie parametrów urla do widełek zadanch przez zlecającego, jeśli pasują, to do wstępnej bazy, dalej pomartwię się później :P), o tyle zastanawia mnie jakby to zrobić jadąc po numerach rekordów. Nie raz już widziałem podobne linki i zostawiałem temat (czy to galerie, czy stronki ze scenowym stuffem), taka wiedza przydałaby mi się na później, nie ukrywam :)

[color=red]Zaznaczam, że nie zamierzam brać udziału w licytacji zlecenia, a jednie interesuje mnie strona techniczna przedsięwzięcia[/color]; to taki disclaimer jakby ktoś se miał pomyśleć 'no tak, ja mu oddam za free technologię, a on na tym zarobi krocie'.

Offline

 

#2  2014-02-23 05:56:31

  Jacekalex - Podobno człowiek...;)

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

Re: Masowe wyciąganie danych ze stron www

Perlem Mociumpanie, Perlem:

[url=http://search.cpan.org/~ether/WWW-Mechanize-1.73/lib/WWW/Mechanize.pm]WWW-Mechanize[/url]
[url=http://search.cpan.org/~sprout/WWW-Scripter-Plugin-JavaScript-0.008a/lib/WWW/Scripter/Plugin/JavaScript.pm]WWW-Scripter-PLugin-Javascript[/url]
[url=http://search.cpan.org/~sprout/WWW-Scripter-Plugin-Ajax-0.09/lib/WWW/Scripter/Plugin/Ajax.pm]WWW-Scripter-PLugin-Ajax[/url]
A także kilka innych modułów i bardzo elastyczne regexy.

Alleluja i do przodu:xD

Pozdro
;-)


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

Offline

 

#3  2014-02-23 09:40:34

  lis6502 - Łowca lamerów

lis6502
Łowca lamerów
Skąd: Stalinogród
Zarejestrowany: 2008-12-04

Re: Masowe wyciąganie danych ze stron www

No dobra, perl, ale jak nakarmisz serwer www pozostałymi danymi po przecinku, inkrementując w pętli licznik? Czy po prostu nie zrozumiałem Twojego postu?

Offline

 

#4  2014-02-23 13:57:55

  Jacekalex - Podobno człowiek...;)

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

Re: Masowe wyciąganie danych ze stron www

Zależy od konkretnej sytuacji.
Wspomniane wyżej mody perla, to takie programistyczne przeglądarki internetowe, które ściągną stronę do zmiennej, mogą zdekodować na niej jeszcze javascripta albo ajaxa, i potem w zmiennej masz czysty html, z którego możesz sobie regexem czesać co duszyczka zapragnie.
Jeśli potem chcesz poszczególne wyczesane dane traktować jakąś pętlą i licznikiem, to droga wolna.

Perl to język programowania, wszystkie rodzaje pętli obsługuje bez żadnego problemu.
Dosyć wyjątkowe są właśnie wspomniane wyżej moduły, repo CPAN i wbudowany potężny silnik regexu, to podstawowy potencjał Perla.

W CPAN do WWW są też mody parsujące stronę poprzez np Webkita.


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

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.010 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00084 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.145.63.131' WHERE u.id=1
0.00091 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.145.63.131', 1732840451)
0.00050 SELECT * FROM punbb_online WHERE logged<1732840151
0.00073 SELECT topic_id FROM punbb_posts WHERE id=258199
0.00124 SELECT id FROM punbb_posts WHERE topic_id=25318 ORDER BY posted
0.00078 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=25318 AND t.moved_to IS NULL
0.00008 SELECT search_for, replace_with FROM punbb_censoring
0.00115 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=25318 ORDER BY p.id LIMIT 0,25
0.00132 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=25318
Total query time: 0.00769 s