آموزش وباسکرپینگ پیشرفته: جمعآوری داده از سایتهای پویا با Python + Selenium
در دنیای امروز، دادهها نفت جدید هستند و توانایی جمعآوری داده از وب (Web Scraping) یک مهارت فوقالعاده ارزشمند در علوم داده، تحلیل بازار و هوش تجاری محسوب میشود. بسیاری از علاقهمندان به پایتون کار خود را با کتابخانههایی مانند `Requests` و `BeautifulSoup` آغاز میکنند. این ابزارها برای سایتهای ایستا (Static) عالی هستند. اما امروزه، بخش عمدهای از وب “پویا” (Dynamic) است؛ محتوا با جاوا اسکریپت بارگذاری میشود. در این سناریو، `Requests` فقط یک صفحه خالی یا یک کد در حال بارگذاری (Loading) را دریافت میکند. اینجاست که Selenium وارد میدان میشود.
چالش سایتهای پویا: چرا Requests و BeautifulSoup کافی نیستند؟
وقتی شما آدرس یک سایت را در مرورگر خود وارد میکنید، اتفاقات زیادی میافتد. در سایتهای قدیمی (ایستا)، سرور یک فایل HTML کامل را برای شما ارسال میکرد. اما در سایتهای مدرن (ساخته شده با React, Angular, Vue):
1. مرورگر یک فایل HTML اولیه و حداقلی دریافت میکند.
2. سپس، فایلهای جاوا اسکریپت اجرا شده و از سرورهای دیگر (API) درخواست داده میکنند.
3. دادههای دریافت شده (مانند لیست محصولات، نظرات کاربران، قیمتها) در نهایت در صفحه “رندر” میشوند.
کتابخانه `Requests` فقط مرحله ۱ را انجام میدهد و به فایل HTML اولیه دسترسی دارد. اما Selenium یک ابزار اتوماسیون مرورگر است؛ این ابزار یک مرورگر واقعی (مانند کروم یا فایرفاکس) را باز میکند، منتظر میماند تا تمام جاوا اسکریپتها اجرا شوند (مراحل ۲ و ۳) و سپس به شما اجازه میدهد تا به HTML “نهایی” و رندر شده دسترسی پیدا کنید.
گام اول: نصب و راهاندازی Selenium
برای شروع کار با Selenium، شما به دو چیز نیاز دارید: کتابخانه پایتون و WebDriver.
- نصب کتابخانه Selenium:
pip install selenium
- دانلود WebDriver: WebDriver پلی است بین اسکریپت پایتون شما و مرورگری که میخواهید کنترل کنید. شما باید درایور مخصوص مرورگر خود را دانلود کنید (مثلاً ChromeDriver برای گوگل کروم). مطمئن شوید که نسخه WebDriver با نسخه مرورگر شما مطابقت دارد. پس از دانلود، فایل اجرایی آن را در مسیری قرار دهید که پایتون به آن دسترسی داشته باشد (مثلاً کنار اسکریپت خود یا در PATH سیستم).
مثال: باز کردن یک صفحه و استخراج داده
کد زیر نحوه راهاندازی مرورگر، باز کردن یک صفحه، انتظار هوشمند برای بارگذاری یک المان، و سپس استخراج متن آن را نشان میدهد.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 1. راهاندازی درایور driver = webdriver.Chrome() # 2. باز کردن URL driver.get("https://www.example.com/dynamic-page") try: # 3. انتظار هوشمند (Explicit Wait) - بخش کلیدی! # به درایور میگوییم حداکثر 10 ثانیه صبر کن تا المانی با ID="content" حاضر شود content_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "content")) ) # 4. استخراج داده از المان print(content_element.text) finally: # 5. بستن مرورگر (بسیار مهم) driver.quit()
تکنیکهای پیشرفته: انتظار هوشمند و تعامل با صفحه
بزرگترین اشتباه در کار با Selenium استفاده از `time.sleep()` است. این کار اسکریپت شما را کند و غیرقابل اعتماد میکند. به جای آن، همیشه از انتظار هوشمند (Explicit Waits) استفاده کنید. `WebDriverWait` به شما امکان میدهد تا منتظر یک “شرط” خاص بمانید، مانند:
- `presence_of_element_located`: المان در DOM وجود داشته باشد (حتی اگر دیده نشود).
- `visibility_of_element_located`: المان قابل مشاهده باشد.
- `element_to_be_clickable`: المان قابل کلیک کردن باشد.
همچنین Selenium میتواند با صفحه تعامل کند، درست مانند یک انسان:
• کلیک کردن روی دکمهها: `driver.find_element(By.ID, “load-more-btn”).click()`
• پر کردن فرمها: `driver.find_element(By.NAME, “search-box”).send_keys(“آموزش پایتون”)`
• اسکرول کردن: `driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)`
Selenium در برابر Requests + BeautifulSoup
ویژگی | Requests + BeautifulSoup | Selenium |
---|---|---|
اجرای جاوا اسکریپت | ❌ خیر | ✅ بله |
سرعت | بسیار بالا | پایین (چون باید مرورگر را اجرا کند) |
مصرف منابع (RAM/CPU) | بسیار کم | بسیار زیاد |
مورد استفاده اصلی | سایتهای ایستا (Static)، APIها | سایتهای پویا (Dynamic)، تست نرمافزار |
جمعبندی
Selenium ابزار نهایی برای زمانی است که سایر روشهای اسکرپینگ شکست میخورند. این ابزار به شما قدرت کنترل کامل یک مرورگر را میدهد تا با پیچیدهترین سایتهای پویا تعامل داشته باشید، روی دکمهها کلیک کنید، اسکرول کنید و منتظر بارگذاری دادهها بمانید. اگرچه کندتر از `Requests` است، اما درهای وب مدرن را به روی شما باز میکند. یادگیری این ابزار قدرتمند در کنار پایتون، شما را به یک متخصص تمام عیار در زمینه جمعآوری داده تبدیل میکند، مهارتی که در آموزشگاه البرز به صورت پروژهمحور تدریس میشود.
دادههای وب مدرن را استخراج کنید!
با تسلط بر پایتون و ابزارهای پیشرفتهای مانند Selenium، میتوانید از هر وبسایتی، هرچقدر هم که پویا باشد، دادههای مورد نیاز خود را جمعآوری کرده و به تحلیلگر داده تبدیل شوید.
- ✅ آموزش عملی وب اسکرپینگ ایستا و پویا
- ✅ کار با کتابخانههای Requests, BeautifulSoup و Selenium
- ✅ پروژههای واقعی جمعآوری و پاکسازی داده
ثبتنام در دوره پایتون پیشرفته و علم داده