Скрапінг даних з YouTube може стати складним завданням через динамічний контент і захисні механізми проти скрапінгу з боку YouTube. Проте, використовуючи певні інструменти і техніки, можна успішно витягувати потрібну інформацію. У цій статті представлено докладний процес збору даних з відео на YouTube, здійснюваний за допомогою Python, Playwright і lxml, що дасть змогу ефективно скрапінгувати дані для аналізу або інших цілей.
Перед початком скрапінгу даних з YouTube, необхідно встановити такі бібліотеки за допомогою pip:
pip install playwright
pip install lxml
Також слід встановити бінарні файли браузера Playwright, щоб забезпечити можливість автоматизації взаємодії з веб-сторінками:
playwright install
Для встановлення тільки бінарних файлів браузера Chromium виконайте таку команду:
playwright install chromium
Опис основних бібліотек, які знадобляться для роботи:
Далі буде детально розписано процес скрапінгу покроково.
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
Наступний код запускає браузер у режимі без відтворення інтерфейсу за допомогою Playwright, переходить за URL відео на YouTube і чекає повного завантаження сторінки. Далі сторінка прокручується, щоб завантажити більше коментарів.
browser = await playwright.chromium.launch(headless=True)
context = await browser.new_context()
page = await context.new_page()
# Перехід за URL відео на YouTube
await page.goto("Ссылка HTTPS", wait_until="networkidle")
# Прокрутка сторінки вниз для завантаження більшої кількості коментарів
for _ in range(20):
await page.mouse.wheel(0, 200)
await asyncio.sleep(0.2)
# Виділяємо час для завантаження додаткового вмісту
await page.wait_for_timeout(1000)
Витягніть HTML-контент сторінки за допомогою Playwright і проаналізуйте його за допомогою lxml.
# Витяг контенту сторінки
page_content = await page.content()
# Парсинг HTML-контенту
parser = html.fromstring(page_content)
Витягніть необхідні дані (назву відео, назву каналу, коментарі) за допомогою виразів XPath. Зберіть усю відповідну інформацію, включно з метаданими відео та коментарями.
# Витяг даних відео
title = parser.xpath('//div[@id="title"]/h1/yt-formatted-string/text()')[0]
channel = parser.xpath('//yt-formatted-string[@id="text"]/a/text()')[0]
channel_link = 'https://www.youtube.com' + parser.xpath('//yt-formatted-string[@id="text"]/a/@href')[0]
posted = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[2]
total_views = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[0]
total_comments = parser.xpath('//h2[@id="count"]/yt-formatted-string/span/text()')[0]
comments_list = parser.xpath('//yt-attributed-string[@id="content-text"]/span/text()')
Збережіть витягнуті дані у файл CSV для зручного аналізу та зберігання.
# Збереження даних у файл CSV
with open('youtube_video_data.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow([“Название”, “Канал”, “Ссылка на канал”, “Дата публикации”, “Всего просмотров”, “Всего комментариев”, “Комментарии”])
writer.writerow([title, channel, channel_link, posted, total_views, total_comments, ", ".join(comments_list)])
Проксі мають ключове значення для успішного веб-скрапінгу, особливо коли потрібно збирати дані у великих обсягах або на сайтах із системами захисту проти автоматичного збору даних. Проксі допомагають обійти ці обмеження, завдяки ротації IP-адрес.
Налаштування проксі:
browser = await playwright.chromium.launch(
headless=True,
proxy={"server": "http://your_proxy_ip:port", "username": "логин", "password": "пароль"}
)
Переваги використання проксі включають:
Ефективне налаштування проксі підвищує анонімність і знижує ймовірність виявлення ваших скрапінг-операцій системами антибот захисту, такими як на YouTube.
Нижче представлено повний код для збору даних з відео на YouTube з використанням Playwright і lxml, включно з інтеграцією проксі.
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
# Асинхронна функція для роботи з Playwright і вилучення даних
async def run(playwright: Playwright) -> None:
# Запуск браузера в режимі "Headless" з налаштуваннями проксі
browser = await playwright.chromium.launch(
headless=True,
proxy={"server": "http://your_proxy_ip:port", "username": "логин", "password": "пароль"}
)
context = await browser.new_context()
page = await context.new_page()
# Перехід на URL відео YouTube
await page.goto("HTTPS ссылка")
# Прокрутка сторінки для завантаження більшої кількості коментарів
for _ in range(20):
await page.mouse.wheel(0, 200)
await asyncio.sleep(0.2)
# Очікування завантаження додаткового контенту
await page.wait_for_timeout(1000)
# Витяг вмісту сторінки
page_content = await page.content()
# Закриття браузера
await context.close()
await browser.close()
# Парсинг HTML вмісту
parser = html.fromstring(page_content)
# Витяг даних відео
title = parser.xpath('//div[@id="title"]/h1/yt-formatted-string/text()')[0]
channel = parser.xpath('//yt-formatted-string[@id="text"]/a/text()')[0]
channel_link = 'https://www.youtube.com' + parser.xpath('//yt-formatted-string[@id="text"]/a/@href')[0]
posted = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[2]
total_views = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[0]
total_comments = parser.xpath('//h2[@id="count"]/yt-formatted-string/span/text()')[0]
comments_list = parser.xpath('//yt-attributed-string[@id="content-text"]/span/text()')
# Збереження даних у CSV-файл
with open('youtube_video_data.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow([“Название”, “Канал”, “Ссылка на канал”, “Дата публикации”, “Всего просмотров”, “Всего комментариев”, “Комментарии”])
writer.writerow([title, channel, channel_link, posted, total_views, total_comments, ", ".join(comments_list)])
# Запуск асинхронної функції
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Варто відзначити важливість правильного налаштування середовища для скрапінгу даних з YouTube, особливо акцентуючи увагу на використанні проксі для обходу обмежень платформи. Рекомендується особливо уважно підходити до вибору проксі-серверів, щоб максимально знизити ризики блокування і забезпечити анонімність операцій. Найбільш придатними стануть статичні ISP проксі, оскільки вони забезпечують високу швидкість з'єднання і стабільність роботи. Резидентські проксі-сервери надають динамічні IP-адреси, які володіють високим показником траст-фактора і рідко визначаються системами безпеки YouTube. Також важливо дотримуватися етичних норм під час збору даних, щоб уникнути порушень правил використання сервісу.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Коментарі: 0