YouTube'dan veri kazımak, dinamik içeriği ve kazıma karşıtı önlemleri nedeniyle zor olabilir. Ancak, doğru araçlar ve tekniklerle, yararlı bilgileri verimli bir şekilde çıkarabilirsiniz. Bu makalede, Python, Playwright ve lxml kullanarak YouTube video verilerini kazıma sürecinde size yol göstereceğiz.
Pip kullanarak gerekli kütüphaneleri yükleyin:
pip install playwright
pip install lxml
Install the Playwright browser binaries:
playwright install
To just install Chromium browser binaries use the following command:
playwright install chromium
YouTube verilerini Python ile web kazıma için öncelikle aşağıdaki kütüphanelere ihtiyacınız olacaktır:
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
Playwright ile başsız bir tarayıcı başlatın, YouTube video URL'sine gidin ve sayfanın tamamen yüklenmesini bekleyin.
Daha fazla yorum yüklemek için sayfayı kaydırın.
browser = await playwright.chromium.launch(headless=True)
context = await browser.new_context()
page = await context.new_page()
# YouTube video URL'sine gitme
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")
# Daha fazla yorum yüklemek için aşağı kaydırın
for _ in range(20):
await page.mouse.wheel(0, 200)
await asyncio.sleep(0.2)
# Ek içeriğin yüklenmesi için biraz zaman tanıma
await page.wait_for_timeout(1000)
Playwright kullanarak sayfanın HTML içeriğini ayıklayın ve lxml ile ayrıştırın.
# Sayfa içeriğinin çıkarılması
page_content = await page.content()
# HTML içeriğini ayrıştırma
parser = html.fromstring(page_content)
XPath ifadelerini kullanarak gerekli veri noktalarını (örn. başlık, kanal, yorumlar) ayıklayın.
Video meta verileri ve yorumlar dahil olmak üzere ilgili tüm verileri toplayın.
# Video verilerini ayıklama
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()')
Kolay analiz ve depolama için çıkarılan verileri bir CSV dosyasına kaydedin.
# Verileri bir CSV dosyasına kaydetme
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)])
Proxy'ler, özellikle büyük ölçekli veri çıkarma işlemlerinde veya YouTube gibi sıkı anti-bot önlemleri olan sitelerde web kazıma işleminde çok önemli bir rol oynar. Playwright komut dosyasında proxy'lerin nasıl uygulandığı aşağıda açıklanmıştır:
Proxy kurulumu:
browser = await playwright.chromium.launch(
headless=True,
proxy={"server": "http://your_proxy_ip:port", "username": "your_username", "password": "your_password"}
)
Proxy kullanmanın faydaları:
Bu uygulama, kazıma faaliyetlerinizin YouTube'un anti-bot mekanizmaları tarafından tespit edilme ve engellenme olasılığının daha düşük olmasını sağlar.
Aşağıda, Playwright ve lxml kullanarak YouTube video verilerini kazımak için proxy uygulaması da dahil olmak üzere tam kod bulunmaktadır.
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
# Playwright'ı çalıştırmak ve verileri ayıklamak için eşzamansız işlev
async def run(playwright: Playwright) -> None:
# Proxy ayarlarıyla başsız tarayıcı başlatma
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()
# YouTube video URL'sine gitme
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")
# Daha fazla yorum yüklemek için aşağı kaydırın
for _ in range(20):
await page.mouse.wheel(0, 200)
await asyncio.sleep(0.2)
# Ek içeriğin yüklenmesi için biraz zaman tanıma
await page.wait_for_timeout(1000)
# Sayfa içeriğinin çıkarılması
page_content = await page.content()
# Tarayıcıyı kapatma
await context.close()
await browser.close()
# HTML içeriğini ayrıştırma
parser = html.fromstring(page_content)
# Video verilerini ayıklama
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()')
# Verileri bir CSV dosyasına kaydetme
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)])
# Eşzamansız işlevi çalıştırma
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Yorumlar da dahil olmak üzere çeşitli YouTube video verilerini kazımak için Python, Playwright ve lxml kullanımına ilişkin adım adım bir öğretici. Bu, kazıma işlemindeki en iyi uygulamalara uyarken dinamik verileri etkili bir şekilde kazımak için proxy'ler kullanılarak ve tarayıcıların davranışını simüle etmek için kod çalıştırılarak yapılır. Analiz için bilgiye ihtiyacınız varsa veya veri kümeleri oluşturuyorsanız, bu tür yöntemler youtube platformunda karşılaştığınız zorlukların üstesinden gelmenize yardımcı olacaktır.
Yorumlar: 0