Extrair dados do YouTube pode ser um desafio devido ao seu conteúdo dinâmico e às medidas anti-raspagem. No entanto, com as ferramentas e técnicas certas, é possível extrair informações úteis com eficiência. Neste artigo, vamos orientá-lo no processo de raspagem de dados de vídeo do YouTube usando Python, Playwright e lxml.
Instale as bibliotecas necessárias usando pip:
pip install playwright
pip install lxml
Instale os binários do navegador Playwright:
playwright install
Para instalar apenas os binários do navegador Chromium, utilize o seguinte comando:
playwright install chromium
Para raspar dados do YouTube na Web com Python, você precisará principalmente das seguintes bibliotecas:
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
Inicie um browser sem cabeça com o Playwright, navegue até ao URL do vídeo do YouTube e aguarde que a página seja totalmente carregada.
Percorrer a página para ver mais comentários.
browser = await playwright.chromium.launch(headless=True)
context = await browser.new_context()
page = await context.new_page()
# Navegar para o URL do vídeo do YouTube
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")
# Deslocação para baixo para ver mais comentários
for _ in range(20):
await page.mouse.wheel(0, 200)
await asyncio.sleep(0.2)
# Dar algum tempo para que o conteúdo adicional seja carregado
await page.wait_for_timeout(1000)
Extraia o conteúdo HTML da página usando o Playwright e analise-o com lxml.
# Extrair o conteúdo da página
page_content = await page.content()
# Analisar o conteúdo HTML
parser = html.fromstring(page_content)
Extraia os pontos de dados necessários (por exemplo, título, canal, comentários) usando expressões XPath.
Colete todos os dados relevantes, incluindo metadados de vídeo e comentários.
# Extração de dados de vídeo
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()')
Salve os dados extraídos em um arquivo CSV para facilitar a análise e o armazenamento.
# Guardar os dados num ficheiro CSV
with open('youtube_video_data.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Title", "Channel", "Channel Link", "Posted", "Total Views", "Total Comments", "Comments"])
writer.writerow([title, channel, channel_link, posted, total_views, total_comments, ", ".join(comments_list)])
Os proxies desempenham um papel crucial na raspagem da Web, especialmente quando se trata de extração de dados em grande escala ou de sites com medidas anti-bot rigorosas, como o YouTube. Veja como os proxies são implementados no script do Playwright:
Configuração do proxy:
browser = await playwright.chromium.launch(
headless=True,
proxy={"server": "http://your_proxy_ip:port", "username": "your_username", "password": "your_password"}
)
Benefícios da utilização de proxies:
Essa implementação garante que suas atividades de raspagem tenham menos probabilidade de serem detectadas e bloqueadas pelos mecanismos anti-bot do YouTube.
Abaixo está o código completo para raspar dados de vídeo do YouTube usando Playwright e lxml, incluindo a implementação de proxy.
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
# Função assíncrona para executar o Playwright e extrair dados
async def run(playwright: Playwright) -> None:
# Iniciar o navegador sem cabeça com definições de proxy
browser = await playwright.chromium.launch(
headless=True,
proxy={"server": "http://your_proxy_ip:port", "username": "your_username", "password": "your_password"}
)
context = await browser.new_context()
page = await context.new_page()
# Navegar para o URL do vídeo do YouTube
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")
# Deslocação para baixo para ver mais comentários
for _ in range(20):
await page.mouse.wheel(0, 200)
await asyncio.sleep(0.2)
# Dar algum tempo para que o conteúdo adicional seja carregado
await page.wait_for_timeout(1000)
# Extrair o conteúdo da página
page_content = await page.content()
# Fechar o browser
await context.close()
await browser.close()
# Analisar o conteúdo HTML
parser = html.fromstring(page_content)
# Extração de dados de vídeo
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()')
# Guardar os dados num ficheiro CSV
with open('youtube_video_data.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Title", "Channel", "Channel Link", "Posted", "Total Views", "Total Comments", "Comments"])
writer.writerow([title, channel, channel_link, posted, total_views, total_comments, ", ".join(comments_list)])
# Execução da função assíncrona
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Ao configurar um ambiente para extrair dados do YouTube, é crucial concentrar-se na utilização de proxies para contornar eficazmente as restrições da plataforma. A seleção cuidadosa dos servidores proxy é essencial para minimizar os riscos de bloqueio e garantir o anonimato da operação. Os proxies ISP estáticos são altamente recomendados pelas suas velocidades de ligação rápidas e estabilidade. Além disso, os proxies residenciais oferecem endereços IP dinâmicos com um elevado fator de confiança, tornando-os menos susceptíveis de serem sinalizados pelos sistemas de segurança do YouTube. Também é vital aderir a padrões éticos durante a recolha de dados para evitar violações dos termos de serviço do YouTube.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentários: 0