CoderCastrov logo
CoderCastrov
Парсер веб-сайтов

Как избежать блокировки при парсинге веб-сайта???

Как избежать блокировки при парсинге веб-сайта???
просмотров
2 мин чтение
#Парсер веб-сайтов
fig. Безголовый браузер

Давайте разберемся с механизмом против парсинга,

Механизм против парсинга работает на основе определения, является ли это ботом или человеком.

  1. Парсинг страниц быстрее, чем способность человека, относится к категории ботов.

  2. Если вы парсите веб-страницы с использованием одного и того же IP-адреса.

  3. Если вы следуете одному и тому же шаблону для парсинга веб-сайта.

Чтобы избежать блокировки при парсинге, имейте в виду следующие моменты.

Теперь обсудим некоторые решения:

import requests 
 
proxies_list = open("proxy.txt", "r").read().strip().split("\n") 
 
def get(url, proxy): 
 try: 
  # Отправляем запросы через прокси на конечный URL 
  response = requests.get(url, proxies={'http': f"http://{proxy}"}, timeout=30) 
  print(response.status_code, response.text) 
 except Exception as e: 
  print(e) 
 
def check_proxies(all_links): 
    proxy = proxies_list.pop()    
    i =0
    for link in all_links:
        print(i)
        get(link, proxy)
        i+=1
all_links = [список ссылок]
check_proxies(all_links)
  1. **User-agent: **Заголовок запроса User-agent - это символьная строка, которая позволяет серверам и сетевым пирам идентифицировать приложение, операционную систему, производителя и версию запрашивающего пользовательского агента. User-agent - это строка, отправляемая веб-браузером пользователя на веб-сервер для идентификации типа браузера, операционной системы и ее версии.

i) Смена User-Agent: Смена User-Agent означает изменение идентификаторов пользователя при отправке веб-запроса. Этот метод может помочь защитить ваш IP-адрес от блокировки или внесения в черный список.

from fake_useragent import UserAgent

ua = UserAgent()
headers = {'User-Agent': ua.random}
link = 'URL веб-сайта'
r = requests.get(link,headers=headers)
source = BeautifulSoup(r.text, 'html.parser')
  1. Замедление парсинга: При парсинге веб-сайта с использованием бота скорость парсинга веб-сайта с использованием бота отличается от скорости парсинга человека. Бот отправляет ненужные запросы на веб-сайт. Из-за перегрузки запросов веб-сайт блокирует вас. Чтобы избежать этой проблемы, добавьте некоторое время задержки между процессом парсинга. Парсите наименьшее количество страниц за раз, делая параллельные запросы.
# Импорт необходимых библиотек
from selenium import webdriver
import time

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
driver.get("https://www.autotrader.ca/")
time.sleep(2)
  1. Безголовый браузер: Безголовый браузер используется для легкого парсинга динамического контента без реального браузера. Безголовый браузер - это веб-браузер без графического интерфейса, но с возможностями реального браузера. Проблема заключается в том, что при любом парсинге контент отображается с помощью кода JavaScript, а не сырого HTML. Для парсинга такого контента вам понадобится безголовый браузер.
  • Options(): Через атрибуты этого класса мы можем отправлять параметры запуска браузера. В нашем случае это options.headless = True, что запустит браузер без пользовательского интерфейса (безголовый).
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# экземпляр класса Options позволяет настроить безголовый Chrome
options = Options()

# этот параметр говорит Chrome, что он должен быть запущен без пользовательского интерфейса (безголовый)
options.headless = True

# инициализация веб-драйвера Chrome с нашими параметрами
driver = webdriver.Chrome(options=options)
driver.get('https://www.google.com/')

# Мы также можем получить некоторую информацию о странице в браузере.
print(driver.title)

# закрыть браузер после наших манипуляций
driver.close()