استخراج اطلاعات از وبسایتها یا همان وب اسکریپینگ (Web Scraping) یکی از مهارتهای جذابی است که با پایتون میتوانید بهراحتی یاد بگیرید و از آن برای جمعآوری دادههای موردنیازتان استفاده کنید. فرقی نمیکند بخواهید قیمت محصولات یک فروشگاه آنلاین را بررسی کنید، اخبار را جمعآوری کنید یا دادههای تحقیقاتی را از سایتها استخراج کنید؛ پایتون ابزارهای قدرتمندی برای این کار در اختیارتان قرار میدهد. در این مقاله، به شما نشان میدهیم که چگونه با پایتون از سایت اطلاعات استخراج کنیم، چه ابزارهایی نیاز دارید و چطور میتوانید کدهایتان را بهینه و جذاب بنویسید. با ما همراه باشید!

چرا وب اسکریپینگ با پایتون؟
پایتون به دلیل سادگی، انعطافپذیری و کتابخانههای قدرتمندش یکی از بهترین زبانها برای وب اسکریپینگ است. کتابخانههایی مثل BeautifulSoup، Scrapy و Requests کار را برای شما ساده میکنند. علاوه بر این، جامعه بزرگ برنامهنویسان پایتون و منابع آموزشی فراوان باعث شدهاند که یادگیری این مهارت برای مبتدیان هم راحت باشد. حالا بیایید قدمبهقدم ببینیم چگونه میتوانید با پایتون از یک وبسایت اطلاعات استخراج کنید.
ابزارهای موردنیاز برای وب اسکریپینگ
برای شروع، باید چند ابزار و کتابخانه را نصب کنید. نگران نباشید، نصب این ابزارها بسیار ساده است. در ادامه لیستی از مهمترین کتابخانههای پایتون برای وب اسکریپینگ را آوردهایم:
- Requests: برای ارسال درخواستهای HTTP به وبسایتها و دریافت محتوای صفحات.
- BeautifulSoup: برای تجزیه (پارس کردن) کد HTML و استخراج اطلاعات موردنظر.
- lxml: یک پارسکننده سریعتر که گاهی همراه با BeautifulSoup استفاده میشود.
- Scrapy: یک فریمورک کامل برای پروژههای وب اسکریپینگ بزرگتر.
- Selenium: اگر نیاز به تعامل با صفحات پویا (مثل صفحاتی که با جاوااسکریپت لود میشوند) دارید.
برای نصب این کتابخانهها، میتوانید از دستور زیر در ترمینال یا خط فرمان استفاده کنید:
pip install requests beautifulsoup4 lxml scrapy selenium
قدم اول: ارسال درخواست به وبسایت
اولین قدم برای استخراج اطلاعات، دریافت محتوای صفحه وب است. کتابخانه Requests این کار را برای شما انجام میدهد. فرض کنید میخواهید اطلاعاتی از یک وبسایت نمونه مثل example.com استخراج کنید. کد زیر را امتحان کنید:
import requests
url = "https://example.com"
response = requests.get(url)
if response.status_code == 200:
print("درخواست با موفقیت انجام شد!")
page_content =[response.text]
else:
print("خطا در دریافت صفحه!")Pythonدر این کد، ما یک درخواست GET به وبسایت ارسال میکنیم و اگر پاسخ با کد وضعیت 200 (موفق) برگردد، محتوای صفحه را در متغیر page_content ذخیره میکنیم.
قدم دوم: تجزیه HTML با BeautifulSoup
حالا که محتوای صفحه را داریم، باید اطلاعات موردنظرمان را از کد HTML استخراج کنیم. اینجا BeautifulSoup وارد بازی میشود. این کتابخانه به شما امکان میدهد تا بهراحتی تگهای HTML را پیدا کنید و اطلاعات داخل آنها را استخراج کنید. به مثال زیر توجه کنید:
from bs4 import BeautifulSoup
# فرض کنید page_content محتوای HTML صفحه است
soup = BeautifulSoup(page_content, 'html.parser')
# پیدا کردن تمام تگهای h1
headings = soup.find_all('h1')
for heading in headings:
print(heading.text)Pythonدر این کد، ما تمام تگهای <h1> را پیدا کرده و متن داخل آنها را چاپ میکنیم. شما میتوانید به جای h1 هر تگ دیگری مثل div، p یا a را جستجو کنید.
قدم سوم: استخراج اطلاعات خاص
فرض کنید میخواهید لیست تمام لینکهای موجود در یک صفحه را استخراج کنید. میتوانید از کد زیر استفاده کنید:
links = soup.find_all('a')
for link in links:
href = link.get('href')
if href:
print(href)Pythonاین کد تمام تگهای <a> را پیدا میکند و ویژگی href (لینک) آنها را چاپ میکند. اگر بخواهید اطلاعات پیچیدهتری مثل جدول قیمت محصولات یا نظرات کاربران را استخراج کنید، کافی است ساختار HTML صفحه را بررسی کنید و تگها و کلاسهای مربوطه را هدف قرار دهید.
نکات مهم برای وب اسکریپینگ حرفهای
- رعایت قوانین وبسایت: همیشه فایل robots.txt وبسایت را بررسی کنید تا ببینید کدام بخشها قابل اسکریپینگ هستند. برخی سایتها ممکن است محدودیتهایی برای اسکریپینگ داشته باشند.
- مدیریت خطاها: همیشه کد خود را طوری بنویسید که در برابر خطاها (مثل قطعی اینترنت یا تغییر ساختار سایت) مقاوم باشد.
- استفاده از هدرها: برای جلوگیری از بلاک شدن توسط سایت، هدرهای مناسب (مثل User-Agent) به درخواستهای خود اضافه کنید:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/91.0.4472.124'}
response = requests.get(url, headers=headers)Python- ذخیرهسازی دادهها: اطلاعات استخراجشده را میتوانید در فایلهای CSV، JSON یا دیتابیس ذخیره کنید. برای مثال، ذخیره در فایل CSV:
import csv
with open('data.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['عنوان', 'لینک'])
for link in links:
writer.writerow([link.text, link.get('href')])Pythonوب اسکریپینگ پویا با Selenium
اگر با سایتی مواجه شدید که محتوای آن با جاوااسکریپت لود میشود (مثل صفحات اینستاگرام یا سایتهای تکصفحهای)، Selenium بهترین گزینه است. این ابزار یک مرورگر واقعی (مثل کروم) را شبیهسازی میکند و میتواند با صفحه تعامل کند. مثال ساده:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://example.com")
# صبر کردن تا لود شدن صفحه
driver.implicitly_wait(10)
# پیدا کردن عناصر
elements = driver.find_elements_by_tag_name('h1')
for element in elements:
print(element.text)
driver.quit()Pythonچالشها و راهحلها
وب اسکریپینگ همیشه ساده نیست. گاهی با مشکلاتی مثل بلاک شدن IP، CAPTCHA یا ساختار پیچیده HTML مواجه میشوید. برای حل این مشکلات:
- از پراکسیها یا سرویسهای چرخش IP استفاده کنید.
- زمانبندی درخواستها را با تأخیر (مثل time.sleep(2)) تنظیم کنید تا شبیه ربات به نظر نیایید.
- برای سایتهای پیچیده، از Scrapy استفاده کنید که امکانات پیشرفتهتری مثل خزیدن خودکار در صفحات دارد.
برای آموزش کامل و گامبهگام وب اسکریپینگ، میتوانید مقالهی عالی سایت Real Python را مطالعه کنید
جمعبندی
وب اسکریپینگ با پایتون نهتنها یک مهارت کاربردی است، بلکه میتواند بسیار سرگرمکننده باشد! با استفاده از ابزارهایی مثل Requests، BeautifulSoup و Selenium، میتوانید تقریباً از هر وبسایتی اطلاعات استخراج کنید. فقط یادتان باشد که همیشه اخلاقی عمل کنید و قوانین وبسایتها را رعایت کنید. حالا که این راهنما را خواندید، آمادهاید که پروژه اسکریپینگ خودتان را شروع کنید؟ کدنویسی را شروع کنید و دادههای موردنظرتان را جمعآوری کنید!