CoderCastrov logo
CoderCastrov
Технология

Дневники парсинга данных: Часть 1

Дневники парсинга данных: Часть 1
просмотров
3 мин чтение
#Технология

Мое путешествие по сбору цифрового мусора из интернета.

Я уже некоторое время задумывался о том, о чем должна быть моя первая статья. Через неделю я решил пойти на риск и попросил GPT (конечно же, искусственный интеллект _должен _быть упомянут в каждой статье, которую вы читаете на данный момент) сгенерировать для меня пять советов по улучшению результатов, которые вы получаете от еженедельных приключений по сбору данных. Однако я понял, что сам многое должен узнать. И вот, я учусь и рассказываю вам об этом:


Совет 1:

Используйте прокси-сервис или VPN. Одна из самых распространенных механизмов защиты от скрапинга, которые используют веб-сайты, заключается в обнаружении и блокировке запросов с одного и того же IP-адреса или юзер-агента. Это может помешать вам скрапить большие объемы данных или получить доступ к ограниченному контенту. Чтобы избежать этого, вы можете использовать прокси-сервис или VPN (виртуальная частная сеть), чтобы скрыть свой IP-адрес и юзер-агент.

Это я знал, но никогда не использовал. Я просто пропускал веб-сайты, которые блокировали меня, и довольствовался плохими данными с маленьких веб-сайтов. В какой-то момент я начал устанавливать поле User-Agent в HTTP-заголовке, отправляемом через API запроса Python, на что-то из этого списка, что решило большую часть моих проблем.

Но так как GPT хочет, чтобы я использовал прокси и VPN, давайте попробуем. Вот что он предложил.

Существует много прокси-сервисов и VPN, доступных онлайн, как бесплатных, так и платных. Некоторые из популярных: — ScrapingBee: Веб-скрапинг API, который обрабатывает прокси, безголовые браузеры, разгадывание капчи и т.д. — Luminati: Большая сеть резиденциальных, мобильных и центров обработки данных прокси для веб-скрапинга. — [тот VPN-сервис, который спонсирует всех, которого я ненавижу] — Tor: Бесплатное и открытое программное обеспечение, которое обеспечивает анонимное общение, маршрутизируя ваш трафик через сеть добровольных узлов.


ScrapingBee был довольно простым и понятным в использовании. У него даже есть конструктор запросов на своем веб-сайте, который позволяет создавать запросы для скрапинга с помощью графического интерфейса (в некоторой степени; все равно нужно знать, что делает код).

Код запроса, созданный конструктором. Что я смог спарсить с TheWire.in Сам конструктор.

Затем я стал любопытным и попробовал использовать ProtonVPN (без сомнения, лучший VPN), чтобы менять IP каждый раз, когда я сталкивался с ошибкой HTTP 403:

import requests
from bs4 import BeautifulSoup
import subprocess

def make_request(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        elif response.status_code == 403:
            print("Запрос заблокирован. Подключение к ProtonVPN...")
            connect_to_vpn()
            return make_request(url)
        else:
            print(f"Запрос завершился с кодом состояния {response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"Произошла ошибка: {str(e)}")

def connect_to_vpn():
    try:
        subprocess.run(['protonvpn-cli', 'connect'])
    except subprocess.CalledProcessError:
        print("Интерфейс командной строки ProtonVPN не найден. Убедитесь, что ProtonVPN установлен.")

def disconnect_from_vpn():
    try:
        subprocess.run(['protonvpn-cli', 'disconnect'])
    except subprocess.CalledProcessError:
        print("Интерфейс командной строки ProtonVPN не найден. Убедитесь, что ProtonVPN установлен.")

url = "https://example.com"
html = make_request(url)
if html:
    # print(html)
    soup = BeautifulSoup(html, 'html.parser')
    print(soup)
    disconnect_from_vpn()

Думаю, мне действительно нравится изобретать велосипед на этом этапе.


Luminati.io начал с хорошего старта. Сайт завис, как только я создал аккаунт, а затем сообщил мне, что мой аккаунт в protonmail не подходит.

После того, как я отказался от своего gmail, сайт отказался подтверждать мой адрес электронной почты, так как ссылка постоянно терялась.


И, наконец, вы можете использовать Tor, чтобы спасти свой самолет от попытки захвата 👍🏽.

Это так же просто, как создание объекта сессии из библиотеки [requests](https://pypi.org/project/requests/) и установка SOCK5-прокси с портом 9050 (для службы Tor) или портом 9150 (для Tor-браузера) как для http, так и для https.

import requests

# Настройка сессии с прокси Tor
session = requests.session()
session.proxies = {
    'http': 'socks5://localhost:9050',
    'https': 'socks5://localhost:9050'
}

# Отправка запроса через прокси Tor
url = 'https://example.com'
response = session.get(url)

# Проверка ответа
if response.status_code == 200:
    print(response.text)
else:
    print(f"Запрос завершился с кодом состояния {response.status_code}")

И, полагаю, это приводит нас к концу Части 1. Мы рассмотрели различные способы избежать блокировки веб-сайтов при парсинге их данных. Не нужно говорить, что будьте внимательны к условиям использования веб-сайта, который вы пытаетесь парсить, и не попадайте в неприятности. Хороший парсинг требует усилий, и это действительно было очень мучительно, но я надеюсь, что вы что-то узнали, как и я. Увидимся на другой стороне!