1. Anti-bot texnologiyalar: bizimlə oynayanlar kimlərdir?
Bugün biz veb-skreypingin ən maraqlı və bir az da mübahisəli mövzularından birinə baş vuracağıq — botlardan qorunmanın yan keçilməsi və CAPTCHA-larla mübarizə. Proqramçı həyatında çox vaxt olduğu kimi, hər hiyləgər boltun gedişinə uyğun sol dişli qeyri-adi bir mexanizm tapılır. Gəlin baxaq, bu maneələrlə necə baş edə bilərik.
Biz "boşluqları" axtarmağa başlamazdan əvvəl gəlin əlimizdə nə olduğunu anlayıb izah edək. Anti-bot texnologiyaları — saytları avtomatlaşdırılmış proqramların həddindən artıq və çox vaxt istənilməyən marağından qoruyan sistemlərdir. Geniş yayılmış bəzi metodlardan bunlardır:
- CAPTCHA: CAPTCHA anti-bot dünyasının nüvə silahı kimidir. Məqsəd — istifadəçiyə insan iştirakı tələb edən tapşırıqlar təqdim edərək botların tələblərini süzgəcdən keçirmək: məsələn, bütün it şəkillərini seçmək və ya bulanıq hərf kombinasiyası yazmaq.
- Davranış analizi: Bəzi saytlar formaları nə qədər tez doldurduğunuzu və ya səhifə elementləri ilə necə əlaqə qurduğunuzu qiymətləndirir. Çox sürətlisiniz? Bax, artıq bloklandınız.
- Sorğulara gecikmələr və məhdudiyyətlər: Sayt sizin insan olmadığınızı şübhəli bilirsə, sorğular arasındakı gecikməni artıra bilər və ya sizi tamamilə bloklaya bilər.
2. Anti-bot metodlarının aşılması
İndi ki rəqibimizi tanıdıq, gəlin onun metodlarını necə aşa biləcəyimizi müzakirə edək.
CAPTCHA həlli
Ən aşkar və eyni zamanda ən çətin üsul — CAPTCHA həllinin avtomatlaşdırılmasıdır. Bəli, bu mümkündür, amma bunun üçün müəyyən alətlər və üçüncü tərəf xidmətləri lazımdır. CAPTCHA-nın bir neçə növü var: mətn, qrafik və hətta audio CAPTCHA-lar.
CAPTCHA həllinin avtomatlaşdırılması üçün 2Captcha və ya Anti-Captcha kimi API servislərdən istifadə etmək olar. Bu servislər CAPTCHA həllini kiçik bir ödəniş qarşılığında təklif edir. Gəlin bunun praktikada necə həyata keçirildiyinə nəzər salaq:
import requests
def solve_captcha(api_key, site_url, captcha_image_url):
# CAPTCHA şəkilini yükləyirik
captcha_image = requests.get(captcha_image_url).content
# Şəkili servisa göndəririk və tapşırıq ID-sini əldə edirik
response = requests.post("http://2captcha.com/in.php", files={'file': captcha_image}, data={'key': api_key, 'method': 'post'})
captcha_id = response.text.split('|')[1]
# CAPTCHA cavabını alırıq
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]
# Funksiyanın istifadə nümunəsi
api_key = 'SIZIN_2CAPTCHA_ACARINIZ'
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("CAPTCHA həlli:", captcha_solution)
Bu kod CAPTCHA həllinin necə həyata keçiriləcəyini göstərir. Amma belə metodlar kompleks qrafik tapşırıqlar və ya sayt öz alqoritmlərini daim dəyişdikdə qeyri-effektiv ola bilər.
İnsan davranışının imitasiya edilməsi
Digər bir üsul — insan davranışının simulyasiyasıdır. Skriptlərinizdə təsadüfi yerlərdə gecikmələr əlavə edə, user-agent dəyişdirə, qarşılıqlı əlaqələri təqlid edə və hətta Selenium ilə siçan hərəkətlərini istifadə edə bilərsiniz:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.get('https://example.com')
# Siçan hərəkətini simulyasiya edirik
actions = ActionChains(driver)
element = driver.find_element_by_id('button')
actions.move_to_element(element)
actions.perform()
# Təbii qarşılıqlı əlaqə yaradan gecikmə
time.sleep(2)
# Hərəkəti həyata keçiririk
element.click()
Selenium haqqında daha ətraflı növbəti mühazirələrdə danışacağıq.
Dinamiki IP və proxy istifadə edilməsi
Sorğuların göndərildiyi IP ünvanını dəyişmək məqsədilə proxy-serverlərdən istifadə edə bilərsiniz. Bu üsul bir IP-dən göndərilən sorğuların sayına qoyulan məhdudiyyətləri aşmağa kömək edə bilər. Bunun üçün Bright Data və Smartproxy kimi xidmətlər mövcuddur.
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. Əhəmiyyətli qeydlər
Anti-botları aşmaq üçün realizasiya bilik və eksperimentləri tələb edir. Vacibdir ki, bütün metodlar qanuni deyil və ya sayt tərəfindən dəstəklənmir. Həmişə yoxlayın ki, nə icazəlidir "robots.txt", və veb-skreypingdə Yaxşı Davranış Qaydalarına riayət edin, serverlərin həddindən artıq yüklənməsindən çəkinin. Bu yalnız hüquqi problemlərdən yayınmağa kömək etməz, eyni zamanda başqasının işinə hörmət də olar.
Heç vaxt ciddi parseri evdəki IP-dən işə salmayın. Tədris məqsədli parsinq üçün heç bir problem olmayacaq, amma əgər skriptiniz təsadüfən bir neçə min sorğunu eyni anda göndərərək kiminsə serverini yıxarsa, sizə suallar verilə bilər. Suallardan sonra isə sizə bu sualları vermək istəyən insanlar gələ bilər.
GO TO FULL VERSION