ساخت یک Crawler ساده با پایتون: آموزش گام به گام
وبخزندهها (Web Crawlers) یا رباتهای جستجو، برنامههایی هستند که به طور خودکار صفحات وب را مرور کرده و اطلاعات آنها را جمعآوری میکنند. این اطلاعات میتواند شامل متن، تصاویر، لینکها و سایر دادههای موجود در صفحات وب باشد. وبخزندهها کاربردهای فراوانی دارند، از جمله ایجاد فهرستهای جستجو، جمعآوری اطلاعات برای تحلیل بازار، و نظارت بر وبسایتها. در این مقاله، به آموزش ساخت یک وبخزنده ساده با استفاده از زبان برنامهنویسی پایتون میپردازیم. این آموزش برای افراد مبتدی و علاقهمند به اتوماسیون و اسکریپتنویسی مناسب است.
پیشنیازها
قبل از شروع، اطمینان حاصل کنید که موارد زیر را در اختیار دارید:
- پایتون نصب شده بر روی سیستم شما (نسخه 3.6 یا بالاتر توصیه میشود).
- یک ویرایشگر متن یا IDE برای نوشتن کد پایتون.
- آشنایی اولیه با مفاهیم برنامهنویسی پایتون، مانند متغیرها، حلقهها، توابع و ساختارهای دادهای.
کتابخانههای مورد نیاز
برای ساخت وبخزنده، از کتابخانههای زیر استفاده خواهیم کرد:
- requests: برای ارسال درخواستهای HTTP به سرورهای وب و دریافت پاسخها.
- Beautiful Soup: برای تجزیه (parse) محتوای HTML و XML و استخراج اطلاعات مورد نظر.
برای نصب این کتابخانهها، میتوانید از pip (مدیریت بسته پایتون) استفاده کنید:
pip install requests beautifulsoup4
مراحل ساخت وبخزنده
ساخت وبخزنده را میتوان به مراحل زیر تقسیم کرد:
- تعیین URL شروع: ابتدا باید URL صفحهای را که میخواهید خزیدن را از آن شروع کنید، مشخص کنید.
- دریافت محتوای صفحه: با استفاده از کتابخانه requests، یک درخواست HTTP به URL مشخص ارسال کنید و محتوای HTML صفحه را دریافت کنید.
- تجزیه محتوای HTML: با استفاده از کتابخانه Beautiful Soup، محتوای HTML دریافت شده را تجزیه کنید تا بتوانید به راحتی عناصر مورد نظر را استخراج کنید.
- استخراج لینکها: از محتوای تجزیه شده، تمام لینکهای موجود در صفحه را استخراج کنید.
- ذخیره لینکها: لینکهای استخراج شده را در یک لیست یا ساختار دادهای مناسب ذخیره کنید.
- تکرار مراحل: برای هر یک از لینکهای ذخیره شده، مراحل 2 تا 5 را تکرار کنید تا صفحات بیشتری را خزیده و اطلاعات آنها را جمعآوری کنید.
- مدیریت دامنه: برای جلوگیری از خزیدن در دامنههای دیگر، باید بررسی کنید که لینکهای استخراج شده متعلق به همان دامنه اصلی باشند.
- جلوگیری از تکرار: برای جلوگیری از خزیدن مجدد در صفحات تکراری، باید لینکهایی را که قبلاً خزیده شدهاند، ذخیره کنید و از خزیدن مجدد آنها خودداری کنید.
کد پایتون
در اینجا یک نمونه کد پایتون برای ساخت یک وبخزنده ساده آورده شده است:
import requests
from bs4 import BeautifulSoup
def crawl(url, visited):
try:
response = requests.get(url)
response.raise_for_status() # بررسی خطاها
soup = BeautifulSoup(response.content, 'html.parser')
visited.add(url)
print(f"Crawling: {url}")
for link in soup.find_all('a'):
href = link.get('href')
if href:
absolute_url = href if href.startswith('http') else url + href
if absolute_url not in visited and url in absolute_url:
crawl(absolute_url, visited)
except requests.exceptions.RequestException as e:
print(f"Error crawling {url}: {e}")
except Exception as e:
print(f"An unexpected error occurred while crawling {url}: {e}")
# URL شروع
start_url = "https://example.com"
# مجموعه ای برای ذخیره URL های بازدید شده
visited_urls = set()
# شروع خزیدن
crawl(start_url, visited_urls)
توضیح کد
در این کد:
- تابع
crawlبه صورت بازگشتی (recursive) عمل میکند و URL داده شده را خزیده و لینکهای موجود در آن را استخراج میکند. requests.get(url)یک درخواست HTTP به URL داده شده ارسال میکند و پاسخ را دریافت میکند.response.raise_for_status()بررسی میکند که آیا درخواست با موفقیت انجام شده است یا خیر. اگر خطایی رخ داده باشد، یک استثنا (exception) ایجاد میکند.BeautifulSoup(response.content, 'html.parser')محتوای HTML پاسخ را تجزیه میکند.soup.find_all('a')تمام تگهای<a>(لینکها) را در صفحه پیدا میکند.link.get('href')مقدار ویژگیhref(URL لینک) را استخراج میکند.absolute_url = href if href.startswith('http') else url + hrefURL نسبی را به URL مطلق تبدیل میکند.if absolute_url not in visited and url in absolute_url:بررسی میکند که آیا URL قبلاً بازدید شده است یا خیر و آیا URL متعلق به همان دامنه اصلی است یا خیر.crawl(absolute_url, visited)تابعcrawlرا به صورت بازگشتی برای URL جدید فراخوانی میکند.visited_urls = set()یک مجموعه (set) برای ذخیره URL های بازدید شده ایجاد میکند. استفاده از مجموعه به دلیل سرعت بالا در بررسی وجود یک عنصر، مناسب است.
بهبود وبخزنده
وبخزنده سادهای که در بالا ساختیم، میتواند با افزودن ویژگیهای زیر بهبود یابد:
- مدیریت خطا: اضافه کردن مدیریت خطا برای مقابله با خطاهای احتمالی، مانند خطاهای شبکه، خطاهای سرور، و خطاهای تجزیه HTML.
- کنترل سرعت: اضافه کردن مکانیزمی برای کنترل سرعت خزیدن، به منظور جلوگیری از ایجاد بار زیاد بر روی سرورهای وب.
- رعایت فایل robots.txt: رعایت فایل
robots.txtبرای احترام به قوانین وبسایتها و جلوگیری از خزیدن در صفحات ممنوعه. - ذخیره دادهها: ذخیره اطلاعات استخراج شده در یک پایگاه داده یا فایل.
- استفاده از چند رشته (threading): استفاده از چند رشته برای افزایش سرعت خزیدن.
- استفاده از صف (queue): استفاده از صف برای مدیریت URL های منتظر خزیدن.
نکات مهم
هنگام ساخت و استفاده از وبخزنده، نکات زیر را در نظر داشته باشید:
- احترام به وبسایتها: همیشه به قوانین وبسایتها احترام بگذارید و از ایجاد بار زیاد بر روی سرورهای آنها خودداری کنید.
- رعایت قوانین: قوانین مربوط به جمعآوری و استفاده از دادهها را رعایت کنید.
- مسئولیتپذیری: مسئولیت استفاده از وبخزنده را بر عهده بگیرید و از آن برای اهداف قانونی و اخلاقی استفاده کنید.
نتیجهگیری
در این مقاله، به آموزش ساخت یک وبخزنده ساده با استفاده از زبان برنامهنویسی پایتون پرداختیم. با استفاده از این آموزش، میتوانید یک وبخزنده پایه را ایجاد کنید و آن را با افزودن ویژگیهای مختلف، بهبود بخشید. وبخزندهها ابزارهای قدرتمندی هستند که میتوانند برای جمعآوری اطلاعات از وبسایتها و انجام تحلیلهای مختلف مورد استفاده قرار گیرند.

بدون دیدگاه