Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie kilku źródeł strony na raz.
Forum PHP.pl > Inne > Hydepark
franz87
Witam,
Mam pytanie, potrzebuje zrobić program, który pobiera wiele źródeł strony na raz - kilka tysięcy (np po 100 albo 1000 źródeł na raz).
Ponieważ licząc, że jedna strona (ok. 30-40KB) pobiarała by się dzisiętne sekundy, to przy dużej ilości, byłby to spory czas.
Tu pytanie, czy pobieranie kilku źródeł na raz jest możliwe?
Nie wiem, czy otwieranie stron działa w podobie do wielodostępności w OS, czy może jest możliwość równoległego pobierania stron?
Jeśli tak to jaką funkcją się posłużyć?
pyro
Tak. Za pomocą curl_multi*

A teraz pora iść na sylwestra.

Do siego roku smile.gif
franz87
Sorry, że odgrzewam temat z przed roku.
pyro dzięki, mam jeszcze jedno pytanie.
Chcę zrobić skrypt, który pobiera źródła do 100.000 stron (z ogólnoświatowego serwisu) i zapisuje je na dysku.
Pytanie czy system, który ma ów serwis nie zrozumie tego jako atak typu DDos lub próbę spowolnienia serwisu i np. zablokuje moje IP etc ?

Drugie pytanie czy mogę tak liczyć szybkość ściągania źródeł ?:
100.000 stron , każda po 30KB , co równa się 3GB.
Pobieram dzięki curl_multi powiedzmy 1000 jednocześnie, czyli 1000*30KB - 29MB.
Internet mam powiedzmy 10Mbit/s czyli potrzebuję 2,9 sekundy, żeby pobrać te 29MB.
Muszę takich równoległych strumieni zrobić 100, żeby było 100.000 źródeł, czyli 100*2,9s - ok. 5 minut.
Mogę tak to liczyć?
everth
Wtrącę się między wódkę a zakąskę:
Ad. pyt. 2:
Cytat
Internet mam powiedzmy 10Mbit/s czyli potrzebuję 2,9 sekundy, żeby pobrać te 29MB.

Tak na oko to w czasie pobrania przesuń przecinek o jedną stronę w lewo (czyli na 29s)
Internet masz powiedzmy do 10Mbit/s a nie gwarantowane 10Mbit/s (choć mogę się mylić) - prędkość będzie zależeć od aktualnego humoru sieci twojego ISP i ilości zapuszczonych torrentów wśród twoich sąsiadów. Podejrzewając dodatkowo że twój ISP ma nazwę kojarzącą się z nowicjuszem to tym gorzej.
Cytat
Pobieram dzięki curl_multi powiedzmy 1000 jednocześnie, czyli 1000*30KB - 29MB.

Życzę powodzenia zwłaszcza że jeśli mnie pamięć nie myli same przeglądarki mają przycięcie na ~25 równoległych połączeń jednocześnie. Na sieci 3G przycięcie schodzi do 1 góra 2 połączeń. Domyśl się dlaczego.

Cytat
Pytanie czy system, który ma ów serwis nie zrozumie tego jako atak typu DDos lub próbę spowolnienia serwisu i np. zablokuje moje IP

Jeśli admin to nie student dorabiający po godzinach i czasem przegląda logi to zrozumie to raczej jednoznacznie. Zwłaszcza że gdyby serwis udostępniał te informacje za darmo to pewnie dostałbyś je bardziej cywilizowaną drogą.

Szczęśliwego Nowego Roku!
franz87
"Zwłaszcza że gdyby serwis udostępniał te informacje za darmo to pewnie dostałbyś je bardziej cywilizowaną drogą."

Zadaje to pytanie, ponieważ istnieje wiele programów, które wyszukują dane z portali aukcyjnych,a bynajmniej ów portale nie przewidują takich opcji w ich API (np. ebayapi czy allegroapi)
Wątpie, żeby takie serwisy dały im dostęp do swoich baz, więc zastanowiło mnie, jak programy takie wydobywają dane.
Jedynie co mi przyszło na myśl, to właśnie taka droga, i po to zadałem tu pytanie, by dowiedzieć się czy jest to wogóle możliwe i czy przy tym rozwiązaniu nieszkodliwe dla funkcjonowania systemu portalu.
pyro
Kurcze z roku na rok coraz mniej widowiskowe te fajerwerki.

Cytat(franz87 @ 1.01.2013, 01:12:01 ) *
Sorry, że odgrzewam temat z przed roku.
pyro dzięki, mam jeszcze jedno pytanie.
Chcę zrobić skrypt, który pobiera źródła do 100.000 stron (z ogólnoświatowego serwisu) i zapisuje je na dysku.
Pytanie czy system, który ma ów serwis nie zrozumie tego jako atak typu DDos lub próbę spowolnienia serwisu i np. zablokuje moje IP etc ?


To zależy od konfiguracji serwera i jego firewalla / IDS / innych systemów zabezpieczeń. Istnieją techniki skutecznie omijające takie zabezpieczenia i nawet adminów przeglądających logi. Niestety nie licz na to, że Ci zdradzę te metody.

Cytat(franz87 @ 1.01.2013, 01:12:01 ) *
Drugie pytanie czy mogę tak liczyć szybkość ściągania źródeł ?:
100.000 stron , każda po 30KB , co równa się 3GB.
Pobieram dzięki curl_multi powiedzmy 1000 jednocześnie, czyli 1000*30KB - 29MB.
Internet mam powiedzmy 10Mbit/s czyli potrzebuję 2,9 sekundy, żeby pobrać te 29MB.
Muszę takich równoległych strumieni zrobić 100, żeby było 100.000 źródeł, czyli 100*2,9s - ok. 5 minut.
Mogę tak to liczyć?


Takie obliczenia w tym przypadku prawie nigdy nie będą dokładne. Lepiej po prostu dać orientacyjną szybkośc, np. w procentach.
Kod
(ilość sciągniętych stron / ilość wszystkich stron do ściągnięcia) * 100 = X %
franz87
Cytat(pyro @ 1.01.2013, 03:40:21 ) *
Niestety nie licz na to, że Ci zdradzę te metody.


Żeby nie było niejasności nie mam zamiaru robić niczego niezgodnego z prawem, stąd też moja obecność/pytanie tutaj.
Inspiruje mnie narzędzie oferowane przez www.manubia.pl
Narzędzie to zdaje raporty sprzedaży konkurencji na serwisach typu allegro,ebay,świstak itp.
Prześledziłem możliwości AllegroWebAPI i EbayWebAPI ,i nie ma tam możliwości wyciągnięcia takich danych.
Wątpie,żeby tak duże serwisy dały możliwość wglądu do swoich baz, bo przecież mogłyby same,wcześniej zrobić takie narzędzie i sprzedawać...Chyba,że się mylę...
pyro
No to mają swoje roboty parsujące. Nic w tym dziwnego.
!*!
  1. $site = array('google.pl', 'google.com', 'tvn24.pl', 'wp.pl', 'onet.pl', 'interia.pl', 'forum.php.pl', 'wikipedia.pl', 'omgubuntu.co.uk', 'elementaryos.org');
  2.  
  3. foreach($site as $key)
  4. {
  5. file_put_contents('./cache/'.$key.'.txt', file_get_contents('http://'.$key));
  6. }

czas pobierania 9.982 sekundy. (biorąc poprawkę że niektóre serwisy mają znacznie więcej niż 30KB źródła).

Czy więc w przypadku stron w ilości sztuk 1k jest sens działań równoległych? Chyba nie bardzo. Wyszłoby +/- 16minut dla wszystkich.
pyro
Cytat(!*! @ 1.01.2013, 10:35:10 ) *
  1. $site = array('google.pl', 'google.com', 'tvn24.pl', 'wp.pl', 'onet.pl', 'interia.pl', 'forum.php.pl', 'wikipedia.pl', 'omgubuntu.co.uk', 'elementaryos.org');
  2.  
  3. foreach($site as $key)
  4. {
  5. file_put_contents('./cache/'.$key.'.txt', file_get_contents('http://'.$key));
  6. }

czas pobierania 9.982 sekundy. (biorąc poprawkę że niektóre serwisy mają znacznie więcej niż 30KB źródła).

Czy więc w przypadku stron w ilości sztuk 1k jest sens działań równoległych? Chyba nie bardzo. Wyszłoby +/- 16minut dla wszystkich.


Jak Ty to liczyłeś...? Twój kod nie pobiera tych stron równolegle, tylko po kolei. Dla 1000 stron za pomocą działań równoległych nie wyjdzie 16 minut, tylko znacznie szybciej, bo skrypt nie czeka aż jeden kod zostanie pobrany, żeby otrzymać następny, tylko ściąga wszystkie jednocześnie.
!*!
Nie pisałem że działa równolegle, obliczenie jest dla kodu powyżej.
pyro
Cytat(!*! @ 1.01.2013, 10:35:10 ) *
czas pobierania 9.982 sekundy. (biorąc poprawkę że niektóre serwisy mają znacznie więcej niż 30KB źródła).

Czy więc w przypadku stron w ilości sztuk 1k jest sens działań równoległych? Chyba nie bardzo. Wyszłoby +/- 16minut dla wszystkich.


A mi się jednak wydaje, że jest bardzo znaczący sens działań równoległych w takim przypadku smile.gif .
!*!
Cytat(pyro @ 1.01.2013, 11:25:14 ) *
A mi się jednak wydaje, że jest bardzo znaczący sens działań równoległych w takim przypadku smile.gif .


Fakt, wchodzenie na forum po sylwestrze to był jednak zły pomysł biggrin.gif

Tylko tu nasuwa się pytanie czy zaprzęgać do tego PHP, o ile file_get_contents daje radę, już samo rozbicie na proces można by wykonać z konsoli + prosty bash
pyro
Cytat(!*! @ 1.01.2013, 11:55:57 ) *
Fakt, wchodzenie na forum po sylwestrze to był jednak zły pomysł biggrin.gif

Tylko tu nasuwa się pytanie czy zaprzęgać do tego PHP, o ile file_get_contents daje radę, już samo rozbicie na proces można by wykonać z konsoli + prosty bash


Daje radę, ale przy 100 000 stron czas pobierania zmniejszy się kilku(nasto/dziesięcio)krotnie.

Cytat(!*! @ 1.01.2013, 11:55:57 ) *
Tylko tu nasuwa się pytanie czy zaprzęgać do tego PHP, o ile file_get_contents daje radę


A file_get_contents() to funkcja Logo? Przespałem usunięcie tej funkcji z najnowszego wydania PHP?
everth
A ja dalej się zastanawiam jak on udźwignie te 1000 połączeń na 10Mbit/s. Przecież już nawet torrenty się krztuszą na czymś takim przy połączeniach UDP. Chyba że to światłowód. Pomijając fakt że bez maskowania bombardując takimi żądaniami serwer sam prosi się o problemy.

Co do usług do których nie masz dostępu - dlaczego zakładasz że skoro ty nie masz to nikt nie ma? Duża firma dogadując się z dużą firmą może dostać więcej niż szary Kowalski czy jakaś firma garażowa.

I jeszcze jedno - jak chcesz napisać robota to nie rób tego sam. Są fajne roboty sieciowe napisane np. w Java które wykonają twoje zadanie ze znacznie lepszym rezultatem.
franz87
Cytat(everth @ 1.01.2013, 19:52:27 ) *
Pomijając fakt że bez maskowania bombardując takimi żądaniami serwer sam prosi się o problemy.

Dlatego zrezygnuję z tego pomysłu. Początkowo myślałem, że taka ilość pobieranych danych raz na dzień nie będzie obciążeniem dla tak rozwiniętych i dużych serwerów. Widocznie było to błędne myślenie i dobrze, że ktoś mi o tym powiedział smile.gif
Głównie chodziło mi o to, by mieć podgląd do jednej rzeczy w aukcjach.
Oferowane programy komercyjne (jak chociażby ten przytoczony niżej) jest dla moich potrzeb zbyt "wygórowany".
Oczywiście jest świetnym narzędziem, jeżeli ktoś potrzebuje wielu opcji, które oferuje.
Teraz zostanie mi chyba tylko skorzystać, z tych oferowanych na rynku.


Cytat(everth @ 1.01.2013, 19:52:27 ) *
Co do usług do których nie masz dostępu - dlaczego zakładasz że skoro ty nie masz to nikt nie ma? Duża firma dogadując się z dużą firmą może dostać więcej niż szary Kowalski czy jakaś firma garażowa.


Cytat
AK74 – Jak to się stało, że Manubia jako w zasadzie jedyny serwis opierający się o analizę danych z Allegro nie został jeszcze przez Allegro ubity? Płacicie im, masz dobre kontakty? O co chodzi?

KL – Mało kto wie, że Allegro oferuje proste statystyki u siebie w systemie, jednak są one bardzo proste i dość toporne w użytkowaniu. Dla bardziej zaawansowanych sprzedawców nie oferuje zbyt wiele. Naiwnością było by twierdzić, że kiedyś w końcu nie zostaną zmodernizowane i rozbudowane. Jednak przez ostatnie 2 lata to właśnie Manubia w prosty sposób sprzyja tym bardziej zaawansowanym sprzedawcom na Allegro. A tym samym przyczynialiśmy się tak troszkę, troszkę do rozwoju Allegro – dlatego po co nas zamykać? smile.gif Podpowiadamy sprzedawcą jak rozpocząć biznes lub w jakim kierunku go rozwijać.





everth
Serwery (jeśli chodzi o Allegro) to udźwigną, nie bój żaby. Tylko charakterystyka tego ruchu będzie taka że od razu zorientują się że to jakiś prymitywny crawler a nie zwykły ruch web. Jakoś nie widzi mi się żeby sprzyjali takim pomysłom. Ruch po sieci też kosztuje.

Są dobrze napisane crawlery open-source i możesz spróbować je przystosować pod swój import - ale to już nie PHP, przynajmniej ja nie znam takich.

Co do allegro to jak grzebałem jeszcze w ich api to oferowali dwie wersje - płatną i darmową. Teraz widzę że zostawili tylko darmową. W twoim cytacie dot. Manubii to mi wygląda na jakąś wypowiedź marketingową - w zasadzie gościu nie mówi nic. Może rzeczywiście opierają się o crawlery a allegro to łaskawie toleruje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.