Привет, друг! Сегодня поговорим о том, как обходить защиту от парсинга. Да, я знаю, звучит как что-то из фильма про хакеров, но на самом деле это просто игра в кошки-мышки между тобой и сайтом. 🐱🐭
Почему сайты защищаются?
Сайты защищаются от парсинга по разным причинам: чтобы не перегружать сервер, защитить контент от копирования, или просто потому что могут. Самые популярные защитные механизмы:
- Cloudflare — проверяет, что ты настоящий браузер
- Rate Limiting — ограничивает количество запросов
- CAPTCHA — заставляет решать головоломки
- User-Agent проверки — блокирует ботов
Метод 1: Правильные заголовки
Самое простое — сделать так, чтобы твой запрос выглядел как запрос от настоящего браузера:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'none',
'Cache-Control': 'max-age=0'
}
response = requests.get('https://example.com', headers=headers)
print(response.text)
Метод 2: Использование прокси
Если тебя заблокировали по IP, используй прокси. Это как менять маски на карнавале:
import requests
import random
# Список прокси (пример)
proxies_list = [
{'http': 'http://proxy1.com:8080', 'https': 'http://proxy1.com:8080'},
{'http': 'http://proxy2.com:8080', 'https': 'http://proxy2.com:8080'},
]
def get_with_proxy(url):
proxy = random.choice(proxies_list)
try:
response = requests.get(url, proxies=proxy, timeout=10)
return response
except:
# Если прокси не работает, пробуем другой
return get_with_proxy(url)
response = get_with_proxy('https://example.com')
Метод 3: Задержки между запросами
Не будь слишком навязчивым! Добавь случайные задержки, чтобы выглядеть как человек:
import time
import random
def human_like_delay():
"""Задержка, которая имитирует поведение человека"""
# Случайная задержка от 2 до 5 секунд
delay = random.uniform(2, 5)
time.sleep(delay)
# Использование
for url in urls:
response = requests.get(url)
process_data(response)
human_like_delay() # Не торопимся!
Метод 4: Обход Cloudflare
Cloudflare — это как охранник на входе в клуб. Нужно выглядеть прилично! Используем cloudscraper:
# pip install cloudscraper
import cloudscraper
# cloudscraper автоматически обходит Cloudflare
scraper = cloudscraper.create_scraper()
response = scraper.get('https://example.com')
print(response.text) # Ура, прошли!
Метод 5: Selenium с Stealth
Если нужен настоящий браузер, но без "отпечатков" бота, используй selenium-stealth:
# pip install selenium-stealth
from selenium import webdriver
from selenium_stealth import stealth
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)
# Делаем браузер "невидимым" для детекторов
stealth(driver,
languages=["ru-RU", "ru"],
vendor="Google Inc.",
platform="Win32",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
)
driver.get("https://example.com")
Метод 6: Ротация User-Agent
Меняй User-Agent как перчатки, чтобы не выглядеть подозрительно:
import random
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36',
]
def get_random_headers():
return {
'User-Agent': random.choice(user_agents),
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
}
response = requests.get(url, headers=get_random_headers())
Полезные библиотеки
- cloudscraper — для обхода Cloudflare
- selenium-stealth — скрывает Selenium от детекторов
- fake-useragent — генерирует случайные User-Agent
- requests-html — альтернатива requests с поддержкой JS
Итоги
Обход защиты — это не взлом, а просто умение "говорить на языке" сайта. Главное — быть вежливым, не делать слишком много запросов и выглядеть как обычный пользователь. Удачи! 🎭