برنامه نویسی

جزئیات ویدیوی 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 و راه‌اندازی مناسب پروکسی، آماده استخراج اطلاعات ارزشمند از پلتفرم هستید. فقط مطمئن شوید که به طور مسئولانه خراش دهید، و در کمترین زمان یک راه اندازی خراش محکم و مقیاس پذیر خواهید داشت.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا