Przepisz mi to jeszcze raz, Sam
20.01.2010 00:09
Już nieomal od kiedy człowiek wpadł na pomysł tworzenia czegokolwiek, pojawił się pomysł by to coś skopiować. No... może odrobina przesady. Ale plagiat towarzyszy ludzkości od bardzo dawna. I mimo tego, iż niektórzy uważają, że wszystko zostało już wymyślone i stworzone, a więc cokolwiek powstaje współcześnie to kopia, to proceder kradzieży własności intelektualnej pozostaje wielce naganny. A Internet i technologia dają nieprawdopodobną możliwość by kopiowanie, podszywanie się pod autorów, przepisywanie stało się nagminne i bardzo, bardzo łatwe.
Podrap ekran.
ScreenScraping to technologia bardzo prosta, wręcz oczywista. Każdy wie, że dane w bazach są uporządkowane, poukładane, przejrzyste i czytelne. Zupełnie inaczej wygląda sytuacja, gdy próbujemy odczytać kod strony internetowej. Standardy standardami, tymczasem kod html pochodzić może z kilku źródeł, niejednokrotnie źródła te mają bardzo odmienne zdanie na temat tych standardów. Do tego dochodzą wszystkie tagi formatujące. I już czytanie kodu przestaje być proste. A my przecież chcemy tylko dowiedzieć się ile kosztuje kostka pamięci ram u naszego dostawcy, który akurat nie udostępnia WebSerivceu albo API. Albo umieścić najnowszą informację na naszej stronie pochodzącą z ulubionego serwisu informacyjnego. Albo potrzebujemy informację o średniej temperatur w południowych stanach USA, które przez przypadek udało się odszukać na pewnej stronie. I tutaj przychodzi nam z pomocą automat. Co jest potrzebne do stworzenia najprostszego automatu? Na przykładzie języka php. Funkcja file_get_conents($url) pobieramy cały output strony podanej w zmiennej $url. I możemy zrobić już z tym stringiem co chcemy. A co jeśli się musimy zalogować, podać konkretne dane do formularza i dopiero ten output analizować? Tutaj (w przypadku php) naprzeciw wychodzi nam biblioteka curl. W przypadku innych języków (perl, c# itp.) zadanie jest podobnie łatwe.
Przepraszam, czy tu biją?
Sposób ten jest tak łatwy, że pozostaje pytanie do postawienia. Jak się zabezpieczyć? Najprostszą metodą jest analiza połączeń pochodzących od konkretnego adresu ip. To oczywiście mało doskonały i ograniczony sposób. Adres ip można zmienić, nikt nie zdecyduje się także na blokowanie na przykład całej klasy adresów dajmy na to- neostrady. Cookies? File_get_contents() nie obsługuje. cURL owszem, ale przecież można tym zarządzać po swojemu. Analiza treści pobieranych (automaty pobierają najczęściej tylko content strony, pomijając multimedia) i eliminacja pojedynczych źródeł w systemie czasowym? No można, ale przecież ip można... itd. Szyfrowanie? cURL z ssl, c# bez problemów również. Wniosek? Skoro nie da się przeciw temu zabezpieczyć należy… Zaprzestać zawracać sobie głowę. Najlepszym o dziwo rozwiązaniem jest wręcz udostępnienie dostępu do tego typu informacji, czy to przez API, czy to przez web service, czy to nawet przez rss. Wiem z doświadczenia, że firmy, które chcą być postrzegane za odpowiedzialne i za poważne, wolą zapłacić za tego typu dostęp i informacje, niż zdobywać go w ten odbiegający od legalności sposób. A obiekt screenscrapingu uwolni się od niszczących wydajność serwerów i łączy zintensyfikowanych requestów.
Gort! Klaatu barada nikto!
Robotów, automatów, screenscraperów w Internecie jest niezliczona liczba. Nie jest zagadką, że część botów jest witana na stronie z otwartymi szeroko ramionami. Nie jest już pewnie dla nikogo niespodzianką, że to boty googla. Może więc uda sie odrobinę odkoszmarzyć pojęcie bota?