Jak programista pobiera strony i po co?
O co chodzi z tym web scrapingiem?
Web scraping to proces pobierania danych z witryny internetowej innej firmy poprzez pobieranie i analizowanie kodu HTML w celu wyodrębnienia żądanych danych. Nie powinniśmy do tego używać API? Owszem, ale nie każda witryna oferuje API, a interfejsy API nie zawsze udostępniają wszystkie potrzebne informacje. Dlatego często jest to jedyne rozwiązanie umożliwiające wyodrębnienie danych z witryny.
Istnieje wiele przypadków użycia takiego „skrobania sieci”:
- Monitorowanie cen w handlu elektronicznym.
- Agregacja wiadomości.
- Generowanie leadów.
- SEO (monitorowanie wyników wyszukiwania).
- Agregacja kont bankowych.
- Tworzenie zbiorów danych, których nie dałoby się utworzyć inaczej.
Robot jak człowiek
Oczywiście web scraping jest wykonywany automatycznie, za pomocą odpowiedniego programu. Główny problem polega na tym, że większość stron internetowych nie chce być w ten sposób odwiedzana. Chcą udostępniać treści tylko prawdziwym użytkownikom za pomocą prawdziwych przeglądarek internetowych (z wyjątkiem Google – prawie wszyscy chcą, aby Google przeszukiwał ich zawartość).
Więc kiedy jako programista skrobiesz sobie sieć za pomocą własnego programu, nie chcesz być rozpoznawany jako robot. Istnieją dwa główne sposoby, aby wyglądać jak człowiek: używać ludzkich narzędzi i naśladować ludzkie zachowanie.
Nagłówek jest ważny
Kiedy otwierasz przeglądarkę i wchodzisz na stronę internetową, prawie zawsze oznacza to, że pytasz serwer HTTP o jakąś zawartość. Jednym z najłatwiejszych sposobów pobierania treści z serwera HTTP jest użycie klasycznego narzędzia wiersza poleceń, takiego jak cURL.
Rzecz w tym, że jeśli po prostu zrobisz: curl www.google.com
, Google ma wiele sposobów, aby dowiedzieć się, że nie jesteś człowiekiem (na przykład patrząc na nagłówki). Nagłówki to małe informacje, które trafiają do każdego żądania HTTP, które z kolei trafia do serwerów. Jedna z tych informacji dokładnie opisuje klienta wysyłającego żądanie. Jest to User-Agent
. Po prostu patrząc na ten nagłówek Google wie, że używasz akurat cURL.
Na szczęście nagłówki można łatwo zmienić za pomocą cURL, a skopiowanie nagłówka User-Agent z „prawdziwej” przeglądarki może załatwić sprawę. Nie jest trudno sztucznie sfałszować żądanie HTTP za pomocą cURL lub dowolnej biblioteki, aby żądanie wyglądało dokładnie tak, jak żądanie wysłane za pomocą przeglądarki. Tak więc, aby ustalić, czy używasz prawdziwej przeglądarki, strony internetowe sprawdzą coś, czego cURL i biblioteka nie mogą zrobić: wykonanie kodu JavaScript.
Javascript
Koncepcja jest prosta, witryna umieszcza na swojej stronie internetowej fragment kodu JavaScript, który po wykonaniu „odblokowuje” stronę. Jeśli używasz prawdziwej przeglądarki, nie zauważysz różnicy. Jeśli nie, otrzymasz stronę HTML z niejasnym kodem Javascript.
Sprawdź oferty pracy na TeamQuest
To rozwiązanie też nie jest całkowicie idealne, głównie dlatego, że teraz bardzo łatwo jest wykonać JavaScript poza przeglądarką, z poziomu Node.js. Jednak Internet ewoluował i istnieją inne sztuczki pozwalające określić, czy używasz prawdziwej przeglądarki. Próba wykonania fragmentów kodu JavaScript po stronie Node.js jest trudna i nie jest niezawodna. Co ważniejsze, gdy tylko witryna ma bardziej skomplikowany system sprawdzania lub jest dużą jednostronicową aplikacją, cURL i wykonanie pseudo-JS w Node.js stają się bezużyteczne. Dlatego najlepszym sposobem, aby wyglądać jak prawdziwa przeglądarka, jest faktycznie jej używać. Najpopularniejszym wyborem jest Chrome Headless, wariant Chrome, który zachowuje się jak Chrome bez całego tego interfejsu użytkownika – a łatwo z niej korzystać w sposób programowy.
Tak więc wyścig zbrojeń w tej dziedzinie nadal trwa.