برنامه نویسی

خراش وب با Puppeteer و Python: راهنمای توسعه دهنده

وب سایت های مدرن و سنگین جاوا اسکریپت اغلب به ابزارهایی احتیاج دارند که می توانند مانند یک کاربر واقعی با محتوای پویا در تعامل باشند. عروسک، یک کتابخانه Node.js توسط Google ، یک نیروگاه برای اتوماسیون مرورگر است – اما اگر می خواهید به جای JavaScript از پایتون استفاده کنید ، چه می کنید؟ در این راهنما ، ما با کاوش شکاف را به وجود می آوریم پپتر، یک بندر غیررسمی پایتون عروسک ، و نشان می دهد که چگونه توسعه دهندگان پایتون می توانند از قابلیت های خود برای خراش دادن وب استفاده کنند.


چرا Puppeteer (و Pyppeteer)؟

Puppeteer مشهور است:

  • کنترل مرورگرهای کروم/کروم بدون سر.
  • رسیدگی به رندر ، کلیک ، ارسال فرم و تصاویر.
  • اشکال زدایی و تجزیه و تحلیل عملکرد.

پپتر این ویژگی ها را به پایتون می آورد و یک API آشنا را برای توسعه دهندگان که پایتون را از جاوا اسکریپت ترجیح می دهند ، ارائه می دهد. در حالی که به طور رسمی نگهداری نمی شود ، هنوز هم برای کارهایی مانند:

  • ضبط برنامه های تک صفحه ای (SPA).
  • خودکار ورود به سیستم و تعامل.
  • تولید PDF یا تصاویر.

شروع با pyppeteer

1. PYPPETEER را نصب کنید

pip install pyppeteer
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2. یک مرورگر راه اندازی کنید

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=False)  # Set headless=True for background
    page = await browser.newPage()
    await page.goto('https://example.com')
    print(await page.title())
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

یادداشت: PYPPETEER به طور خودکار Chromium را در اولین اجرا بارگیری می کند.


گردش کار اصلی خراش وب

بیایید داده های محصول را از یک سایت تجارت الکترونیکی نمایشی جدا کنیم.

مرحله 1: محتوای پویا را استخراج کنید

async def scrape_products():
    browser = await launch(headless=True)
    page = await browser.newPage()
    await page.goto('https://webscraper.io/test-sites/e-commerce/allinone')

    # Wait for product elements to load
    await page.waitForSelector('.thumbnail')

    # Extract titles and prices
    products = await page.querySelectorAll('.thumbnail')
    for product in products:
        title = await product.querySelectorEval('.title', 'el => el.textContent')
        price = await product.querySelectorEval('.price', 'el => el.textContent')
        print(f"{title.strip()}: {price.strip()}")

    await browser.close()

asyncio.get_event_loop().run_until_complete(scrape_products())
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله 2: رسیدگی به صفحه بندی

برای بارگذاری مطالب بیشتر روی دکمه ها یا پیمایش کلیک کنید:

# Click a "Next" button
await page.click('button:contains("Next")')

# Scroll to trigger lazy loading
await page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
await page.waitForTimeout(2000)  # Wait for content to load
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


تکنیک های پیشرفته

1. ورود به سیستم خودکار

async def login():
    browser = await launch(headless=False)
    page = await browser.newPage()
    await page.goto('https://example.com/login')

    # Fill credentials
    await page.type('#username', 'your_email@test.com')
    await page.type('#password', 'secure_password')

    # Submit form
    await page.click('#submit-button')
    await page.waitForNavigation()

    # Verify login success
    await page.waitForSelector('.dashboard')
    print("Logged in successfully!")
    await browser.close()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2. درخواست های شبکه را رهگیری کنید

ضبط پاسخ های API یا منابع بلوک (به عنوان مثال ، تصاویر):

async def intercept_requests():
    browser = await launch()
    page = await browser.newPage()

    # Block images to speed up scraping
    await page.setRequestInterception(True)
    async def block_images(request):
        if request.resourceType in ['image', 'stylesheet']:
            await request.abort()
        else:
            await request.continue_()
    page.on('request', block_images)

    await page.goto('https://example.com')
    await browser.close()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

3. تصاویر/PDF را تولید کنید

await page.screenshot({'path': 'screenshot.png', 'fullPage': True})
await page.pdf({'path': 'page.pdf', 'format': 'A4'})
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


بهترین روشها

  1. از تشخیص خودداری کنید:

    • از افزونه های مخفی استفاده کنید (به عنوان مثال ، pyppeteer-stealth).
    • نمایندگان کاربر را بچرخانید:
     await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64)')
    
  • رفتار انسان را با تأخیرهای تصادفی تقلید می کند.
  1. رسیدگی به خطا:
   try:
       await page.goto('https://unstable-site.com')
   except Exception as e:
       print(f"Error: {e}")
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  1. پشتیبانی پروکسی:
   browser = await launch(args=['--proxy-server=http://proxy-ip:port'])
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


pyppeteer در مقابل گزینه های دیگر

ابزار زبان بهترین برای
پپتر پیتون گردش کار ساده مانند عروسک
نمایشنامه نویس پیتون اتوماسیون مدرن مرورگر متقاطع
سلنیوم پیتون پشتیبانی مرورگر میراث

چه زمانی از pyppeteer استفاده کنید:

  • شما به ویژگی های شبیه به Puppeteer در پایتون نیاز دارید.
  • پروژه های سبک وزن که در آن نمایشنامه نویس/scropy بیش از حد است.

محدودیت ها:

  • درگاه غیررسمی (به روزرسانی ها ممکن است از Puppeteer عقب مانده باشد).
  • پشتیبانی محدود جامعه.

موارد استفاده در دنیای واقعی

  1. نظارت بر تجارت الکترونیکی: قیمت ها در سایت های React/Angular.
  2. اتوماسیون رسانه های اجتماعی: پست های عمومی را از سیستم عامل هایی مانند اینستاگرام خراش دهید.
  3. استخراج داده ها از داشبورد: داده ها را از ابزارهای تحلیلی معتبر بکشید.
  4. تست خودکار: گردش کار UI را در طول توسعه تأیید کنید.

پایان

PYPPETEER قابلیت های اتوماسیون قدرتمند مرورگر Puppeteer را به پایتون می آورد و آن را به یک انتخاب محکم برای خراش دادن سایت های سنگین جاوا اسکریپت تبدیل می کند. در حالی که فاقد استحکام نمایشنامه نویس یا سلنیوم است ، سادگی و API مانند عروسک های آن ، آن را برای توسعه دهندگان پایتون با محتوای پویا ایده آل می کند.

مراحل بعدی:


برای نوک: همیشه یک وب سایت را بررسی کنید robots.txt و شرایط خدمات قبل از خراش دادن. وقتی شک دارید ، از API های رسمی استفاده کنید!

خراش مبارک! 🚀

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

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

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

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