July 31, 2020

Спроба накрутити перегляди на YouTube з допомогою Python 1/4

Цілі

  1. Реалізувати скрипт, який буде змінювати IP адреси (proxy).
  2. Оглянути доступні інструменти для цієї задачі.
  3. Організувати безперебійний перехід на сторінку з відео.
  4. Дослідити як зараховується перегляд для відео на YouTube.
  5. Зробити мінімум 350-400 переглядів на обраному відео.

Proxy та їх використання у запитах

Проксі-сервер — сервер, який виступає посередником при виконанні запитів до певного ресурсу, з англійської proxy перекладається як "представник" чи "уповноважений". Не будемо глибоко вникати в суть цієї технології, головне, що варто знати, ми хочемо приховувати справжню IP-адресу для отримання потрібної інформації.

Принцип роботи проксі на простій схемі

Є багато ресурсів, де можна отримати список безкоштовних проксі-серверів, аби посилати свої запити через них.

Приклад списку проксі з http://free-proxy.cz/ru/proxylist/country/US/all/ping/all

Для роботи нам потрібно IP-адрес та порт, проте інші параметри можуть знадобитись для того, щоб фільтрувати отриманий список.

Країна та місто — часто потрібно використовувати лише фільтрацію по країні, аби отримати доступ до локального ресурсу.

Ступінь анонімності — в залежності від цього параметру гарантується чи високий рівень анонімності, чи абсолютно низький, при якому кінцевий ресурс все одно бачить нашу справжню адресу.

Швидкість відгуку (timeout) — те, наскільки швидко обробляються запити цим проксі-сервером, від цього залежить кількість виконаних запитів.

Як попрактикуватись?

  1. Скопіювати/завантажити файл зі списком проксі з GitHub.
  2. Спробувати відправити 20 запитів з різними проксі до ресурсу https://api.myip.com/ з використанням requests-futures або aiohttpякщо хочеться гострих вражень.
  3. Вивести результати в якості логу з використанням модуля logging.

Зробивши це, одразу стане зрозуміло, що таке підводні камені безкоштовних проксі-серверів і як з цим справлятись. Або не стане зрозуміло взагалі нічого :)

Приклад коду з requests-futures:

from concurrent.futures import ThreadPoolExecutor
from requests_futures.sessions import FuturesSession

# створення сесії з використанням мультипроцесингу 
session = FuturesSession(executor=ThreadPoolExecutor(max_workers=10))

Приклад коду з aiohttp:

# створення асинхронної сесії
async with aiohttp.ClientSession() as session:
    async with session.get("http://python.org",
                           proxy="http://proxy.com") as resp:
        print(resp.status)

Доволі непогано це все описано в статті: Python та HTTP-клієнти

Загальна інформація про скрапинг тут: Web Scraping в Python. Детальна інструкція