جزئیات ویدیوی YouTube را به طور موثر با پایتون خراش دهید

یوتیوب دارای پایگاه کاربر عظیمی است که مجموعه عظیمی از محتوا را ایجاد می کند – ویدئوها، نظرات، کانال ها – که برای تجزیه و تحلیل آماده هستند. با این حال، از بین بردن این گنجینه به سادگی کلیک کردن بر روی «بازی» نیست. محتوای پویا و سیستمهای دفاعی پیشرفته ضد ربات YouTube برای جلوگیری از خراشهای خودکار طراحی شدهاند. بنابراین، چگونه می توانید از این موانع عبور کنید؟
در این راهنما، من به شما نشان خواهم داد که چگونه داده های ویدیوی YouTube را با استفاده از Python، Playwright و lxml خراش دهید. بدون کرک – فقط گام های واقعی و عملی برای کمک به استخراج اطلاعات ارزشمند به طور کارآمد و اخلاقی.
مرحله 1: محیط خود را راه اندازی کنید
قبل از ورود به کد، بیایید همه چیز را تنظیم کنیم.
شما به این ابزارها نیاز خواهید داشت:
1. نمایشنامه نویس: این کتابخانه مرورگرهای بدون هد مانند Chromium را خودکار می کند و شما را قادر می سازد درست مانند یک انسان با صفحات وب تعامل داشته باشید.
2. lxml: یک کتابخانه پایتون برای تجزیه HTML/XML، مناسب برای خراش دادن داده های وب با سرعت و دقت.
3. ماژول CSV: یک کتابخانه داخلی پایتون برای ذخیره دادههایی که در یک CSV برای تجزیه و تحلیل آسان میریزید.
کتابخانه ها را نصب کنید:
ابتدا استفاده کنید pip
برای نصب Playwright و lxml:
pip install playwright
pip install lxml
سپس، باینری های مرورگر لازم را برای Playwright نصب کنید:
playwright install
یا اگر فقط به Chromium نیاز دارید:
playwright install chromium
مرحله 2: وارد کردن کتابخانه ها برای کار
وقتی همه چیز را نصب کردید، کتابخانههایی را وارد کنید که اسکریپت شما را تقویت میکنند:
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
مرحله 3: کنترل مرورگر با Playwright
اکنون وارد بخش سرگرم کننده می شویم: کنترل مرورگر. Playwright به شما امکان می دهد مرورگر را به صورت برنامه ای کنترل کنید. به ویدیوی YouTube پیمایش میکنید، اجازه میدهید بارگیری شود و حتی برای بارگیری محتوای بیشتر به پایین بروید. در اینجا به این صورت است:
browser = await playwright.chromium.launch(headless=True)
context = await browser.new_context()
page = await context.new_page()
# Navigate to the YouTube video
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")
# Scroll down to load more comments
for _ in range(20):
await page.mouse.wheel(0, 200)
await asyncio.sleep(0.2)
# Let some content load
await page.wait_for_timeout(1000)
مرحله 4: مدیریت تجزیه محتوای HTML
هنگامی که صفحه بارگذاری شد، HTML آن را استخراج می کنیم و با استفاده از lxml آن را تجزیه می کنیم. این به ما اجازه می دهد تا به راحتی داده های مورد نظر خود را بیرون بیاوریم.
page_content = await page.content()
parser = html.fromstring(page_content)
مرحله 5: کشیدن داده ها
اینجاست که میتوانید تمام جزئیات جالب را به دست آورید: عنوان ویدیو، نام کانال، تعداد بازدیدها، نظرات و موارد دیگر. از 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()')
مرحله 6: خروجی داده ها
اکنون که دادهها را در اختیار دارید، زمان ذخیره آن فرا رسیده است. ما آن را برای تجزیه و تحلیل بعدی در یک فایل 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)])
مرحله 7: پراکسی ها – چگونه می توان خراش خود را زیر رادار نگه داشت
هنگام تراشیدن در مقیاس، پروکسی ها ضروری هستند. YouTube میتواند به سرعت IP شما را مسدود کند اگر درخواستهای زیادی داشته باشید. بنابراین، چگونه می توانید از این موضوع دور شوید؟
1. راه اندازی پروکسی: نمایشنامهنویس به شما اجازه میدهد تا با افزودن a به راحتی از پروکسیها استفاده کنید proxy
پارامتر هنگام راه اندازی مرورگر
browser = await playwright.chromium.launch(
headless=True,
proxy={"server": "http://your_proxy_ip:port", "username": "your_username", "password": "your_password"}
)
2. نیاز به پروکسی
مخفی کردن IP: پروکسی ها IP واقعی شما را مخفی می کنند و احتمال بلاک شدن را کاهش می دهند.
رسیدگی به درخواست: پراکسیهای چرخشی درخواستهای شما را توزیع میکنند و به نظر میرسند که از سوی کاربران مختلف آمدهاند.
دور زدن محدودیت های منطقه ای: برخی از محتواها فقط در مناطق خاصی در دسترس هستند. پروکسی ها می توانند به شما در دسترسی به آن کمک کنند.
پراکسیها پرچمگذاری فعالیتهای شما را برای YouTube سختتر میکنند، اما از آنها مسئولانه استفاده کنید. زیاده روی نکنید.
نمونه کد نویسی کامل
اکنون که مراحل را می دانید، در اینجا پیاده سازی کامل به صورت یکجا آمده است:
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
# Main function to scrape the YouTube video data
async def run(playwright: Playwright) -> None:
# Launch the browser with proxy settings
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()
# Navigate to the YouTube video URL
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")
# Scroll to load more comments
for _ in range(20):
await page.mouse.wheel(0, 200)
await asyncio.sleep(0.2)
# Wait for additional content to load
await page.wait_for_timeout(1000)
# Get page content
page_content = await page.content()
# Close the browser
await context.close()
await browser.close()
# Parse the HTML
parser = html.fromstring(page_content)
# Extract data
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()')
# Save the data to a CSV file
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)])
# Running the async function
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
نکات حرفه ای برای انتخاب پروکسی
پروکسی های مسکونی: شناسایی اینها سخت تر است و معمولاً ناشناس بودن بیشتری ارائه می دهند. آنها برای خراش دادن در مقیاس بزرگ ایده آل هستند.
پروکسی های استاتیک ISP: سریع و قابل اعتماد، عالی برای درخواست های پرسرعت بدون وقفه.
در حالی که جمع کردن داده های YouTube قدرتمند است، پیروی از استانداردهای اخلاقی ضروری است. به شرایط خدمات YouTube احترام بگذارید. از تحت فشار قرار دادن سرورهای آنها خودداری کنید و همیشه تأثیر اقدامات خود را در نظر بگیرید.
بسته بندی آن
اکنون ابزارهایی برای خراش دادن YouTube به طور مؤثر و مؤثر دارید. با Playwright، lxml و راهاندازی مناسب پروکسی، آماده استخراج اطلاعات ارزشمند از پلتفرم هستید. فقط مطمئن شوید که به طور مسئولانه خراش دهید، و در کمترین زمان یک راه اندازی خراش محکم و مقیاس پذیر خواهید داشت.