1. Technologie antybotowe: kto gra z nami w kotka i myszkę?
Dzisiaj zanurzymy się w jeden z najbardziej fascynujących i, można powiedzieć, kontrowersyjnych tematów web-scrapingu — obchodzenie zabezpieczeń przed botami i walka z CAPTCHA. Jak to często bywa w życiu programisty, na każdy sprytny gwóźdź znajdzie się nakrętka z lewym gwintem, więc zobaczmy, jak możemy radzić sobie z tymi przeszkodami.
Zanim zaczniemy szukać luk, spróbujmy zrozumieć, z czym mamy do czynienia. Technologie antybotowe to nic innego jak systemy chroniące strony przed nadmierną, a często niepożądaną uwagą zautomatyzowanych programów. Oto kilka powszechnych metod:
- CAPTCHA: CAPTCHA — to jak broń jądrowa w świecie antybotów. Celem jest odfiltrowanie żądań botów, przedstawiając użytkownikowi zadania wymagające ludzkiego udziału: na przykład wybierz wszystkie obrazy z taksami lub wpisz rozmazaną kombinację liter.
- Analiza zachowania: Niektóre strony oceniają, jak szybko wypełniasz formularze lub wchodzisz w interakcje z elementami strony. Zbyt szybko? No i zostajesz zbanowany.
- Opóźnienia i ograniczenia na żądania: Jeśli strona zaczyna podejrzewać, że nie jesteś człowiekiem, może zwiększyć opóźnienia między żądaniami lub całkowicie cię zablokować.
2. Metody obejścia antybotów
Teraz, gdy znamy przeciwnika, przyjrzyjmy się niektórym metodom jego obejścia.
Rozwiązywanie CAPTCHA
Najbardziej oczywista i jednocześnie trudna metoda — to automatyzacja rozwiązania CAPTCHA. Tak, to możliwe, ale wymaga określonych narzędzi i usług stron trzecich. CAPTCHA występuje w różnych typach, w tym tekstowych, graficznych czy nawet dźwiękowych.
Do automatyzacji rozwiązania CAPTCHA można używać API usług takich jak 2Captcha lub Anti-Captcha, które oferują rozwiązywanie CAPTCHA za drobną opłatą. Zobaczmy, jak to może wyglądać w praktyce:
import requests
def solve_captcha(api_key, site_url, captcha_image_url):
# Pobieramy obraz CAPTCHA
captcha_image = requests.get(captcha_image_url).content
# Wysyłamy obraz do usługi i otrzymujemy ID zadania
response = requests.post("http://2captcha.com/in.php", files={'file': captcha_image}, data={'key': api_key, 'method': 'post'})
captcha_id = response.text.split('|')[1]
# Pobieramy odpowiedź CAPTCHA
solution_url = f"http://2captcha.com/res.php?key={api_key}&action=get&id={captcha_id}"
solution_response = requests.get(solution_url)
while 'CAPCHA_NOT_READY' in solution_response.text:
solution_response = requests.get(solution_url)
return solution_response.text.split('|')[1]
# Przykład użycia funkcji
api_key = 'TWÓJ_KLUCZ_2CAPTCHA'
site_url = 'https://example.com'
captcha_image_url = 'https://example.com/captcha_image'
captcha_solution = solve_captcha(api_key, site_url, captcha_image_url)
print("Rozwiązanie CAPTCHA:", captcha_solution)
Ten kod pokazuje, jak można wysłać żądanie rozwiązania CAPTCHA. Jednak takie metody mogą okazać się nieskuteczne wobec bardziej złożonych graficznych zadań lub jeśli strona aktywnie zmienia swoje algorytmy.
Symulacja ludzkiego zachowania
Innym sposobem oszustwa jest symulacja ludzkiego zachowania. Możesz wprowadzać opóźnienia w losowych miejscach w swoich skryptach, zmieniać user-agent, emulować interakcje obustronne, a nawet używać metod poruszania myszą za pomocą Selenium:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.get('https://example.com')
# Emulujemy ruch myszy
actions = ActionChains(driver)
element = driver.find_element_by_id('button')
actions.move_to_element(element)
actions.perform()
# Opóźnienie dla stworzenia naturalnej interakcji
time.sleep(2)
# Wykonujemy działanie
element.click()
Więcej o Selenium opowiemy na kolejnych wykładach.
Użycie dynamicznych IP i proxy
Możesz również używać serwerów proxy, aby zmieniać adres IP, z którego wysyłane są żądania. To może pomóc obejść ograniczenia liczby żądań z jednego IP. Do tego istnieją usługi takie jak Bright Data oraz Smartproxy.
import requests
proxy = {
"http": "http://123.456.789.012:8080",
"https": "http://123.456.789.012:8080",
}
response = requests.get('https://example.com', proxies=proxy)
print(response.content)
3. Ważne uwagi
Implementacja obejścia antybotów wymaga wiedzy i eksperymentów. Ważne jest pamiętać, że nie wszystkie metody są legalne lub akceptowane przez stronę. Zawsze sprawdzaj, co jest dozwolone w "robots.txt", i przestrzegaj zasad dobrego zachowania w web-scrapingu, unikając przeciążeń serwerów. To nie tylko pozwoli ci uniknąć problemów prawnych, ale także będzie oznaką szacunku do cudzej pracy.
Nigdy nie uruchamiaj poważnego parsera ze swojego domowego IP. Za ćwiczebny scraping nic ci nie grozi, ale jeśli twój skrypt przypadkowo "położy" czyjś serwer wysyłając jednocześnie kilka tysięcy żądań, możesz mieć problemy. A problemy mogą szybko zamienić się w wizytę ludzi, którzy będą mieli do ciebie kilka pytań.
GO TO FULL VERSION