Парсер веб-сайтов
Как избежать блокировки при парсинге веб-сайта???
Table Of Content
- Давайте разберемся с механизмом против парсинга,
- Импорт необходимых библиотек
- экземпляр класса Options позволяет настроить безголовый Chrome
- этот параметр говорит Chrome, что он должен быть запущен без пользовательского интерфейса (безголовый)
- инициализация веб-драйвера Chrome с нашими параметрами
- Мы также можем получить некоторую информацию о странице в браузере.
- закрыть браузер после наших манипуляций
Давайте разберемся с механизмом против парсинга,
Механизм против парсинга работает на основе определения, является ли это ботом или человеком.
-
Парсинг страниц быстрее, чем способность человека, относится к категории ботов.
-
Если вы парсите веб-страницы с использованием одного и того же IP-адреса.
-
Если вы следуете одному и тому же шаблону для парсинга веб-сайта.
Чтобы избежать блокировки при парсинге, имейте в виду следующие моменты.
Теперь обсудим некоторые решения:
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)
- **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')
- Замедление парсинга: При парсинге веб-сайта с использованием бота скорость парсинга веб-сайта с использованием бота отличается от скорости парсинга человека. Бот отправляет ненужные запросы на веб-сайт. Из-за перегрузки запросов веб-сайт блокирует вас. Чтобы избежать этой проблемы, добавьте некоторое время задержки между процессом парсинга. Парсите наименьшее количество страниц за раз, делая параллельные запросы.
# Импорт необходимых библиотек
from selenium import webdriver
import time
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
driver.get("https://www.autotrader.ca/")
time.sleep(2)
- Безголовый браузер: Безголовый браузер используется для легкого парсинга динамического контента без реального браузера. Безголовый браузер - это веб-браузер без графического интерфейса, но с возможностями реального браузера. Проблема заключается в том, что при любом парсинге контент отображается с помощью кода 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()