ساخت کراولر URL برای نگاشت یک وب سایت با پایتون – راهنمای کاربردی


قبل از این که شروع به توضیح مراحل ساخت یک کراولر URL یا «خزنده آدرس» (URL Crawler) بکنیم، ابتدا باید مطمئن شویم که با مفهوم وب اسکرپینگ آشنا هستیم. وب اسکرپینگ به فرایند استخراج دادهها از وبسایتها برای عرضه آن در قالبی که کاربران به سهولت درک کنند گفته میشود.
در این راهنما میخواهیم میزان آسانی ساخت یک کراولر URL ساده را در پایتون نشان دهیم. از این کراولر میتوانید برای نگاشت یک وبسایت استفاده کنید. با این که این برنامه نسبتاً ساده است، اما یک مقدمه عالی برای آشنایی با مفاهیم بنیادی وب اسکرپینگ و اتوماسیون محسوب میشود. ما روی استخراج بازگشتی لینکها از صفحههای وب متمرکز میشویم، اما همین ایدهها را میتوان برای اغلب راهحلهای دیگر نیز مورد استفاده قرار داد.
برنامه ما به صورت زیر است:
- یک صفحه وب را بازدید میکند.
- همه URL-های یکتای پیدا شده روی صفحه وب را گردآوری کرده و آنها را به صف اضافه میکند.
- به صورت بازگشتی URL-ها را یک به یک و تا زمانی که صف خالی شود پردازش میکند.
- نتایج را نمایش میدهد.
شروع
نخستین کاری که باید انجام دهیم ایمپورت کردن همه کتابخانههای لازم است.
ما از BeautifulSoup ،requests و urllib برای وب اسکرپینگ استفاده میکنیم.
from bs4 import BeautifulSoup import requests import requests.exceptions from urllib.parse import urlsplit from urllib.parse import urlparse from collections import deque
سپس باید یک URL برای شروع کراول انتخاب کنیم. با این که میتوان هر صفحه وبی با لینکهای HTML انتخاب کرد، اما ما پیشنهاد میکنیم ابتدا از این وبسایت (+) آغاز کنید. این وبسایت اختصاصاً برای اسکرپ شدن طراحی شده است و برای بهرهگیری از آن مشکلی نخواهید داشت.
url = https://scrapethissite.com
سپس قصد داریم یک شیء deque خلق کنیم تا بتوانیم به سادگی لینکهای جدیداً ایجادشده را اضافه کنیم و زمانی که کار پردازششان به اتمام رسید، آنها را حذف کنیم. ما deque را با متغیر url مقداردهی میکنیم.
سپس میتوانیم از یک set برای ذخیرهسازی URL-های یکتا در زمان پردازش شدن استفاده کنیم:
ما همچنین میخواهیم رد URL-های محلی (همان دامنه هدف)، بیگانه (متفاوت از دامنه هدف) و URL-های شکسته را داشته باشیم:
مرحله کراول کردن
اینک که همه چیز را آماده کردهایم، میتوانیم شروع به نوشتن کد واقعی برای کراول کردن یک وبسایت بکنیم. بدین ترتیب به بررسی همه URL-ها در صف میپردازیم تا ببینیم آیا در آن صفحه لینک دیگری وجود دارد یا نه و همه موارد موجود را به انتهای صف اضافه کنیم تا این که در آن صفحه هیچ لینکی باقی نماند. به محض این که کار اسکرپ کردن یک URL به پایان برسد آن را از صف خارج میکنیم و برای کاربردهای آتی به مجموعه processed_urls اضافه میکنیم.
در ادامه یک استثنا برای به دست آوردن همه صفحههای وب مفقود و اضافه کردن آنها به مجموعه broken_urls برای کاربردهای آتی مشاهده میکنید:
سپس باید URL مبنای صفحه وب را به دست آوریم تا بتوانیم به سادگی آدرسهای محلی و خارجی را از هم تفکیک کنیم:
در این مرحله BeautifulSoup را مقداردهی میکنیم تا سند HTML را پردازش کند:
اکنون صفحه وب را برای همه لینکها اسکرپ کرده و آنها را به مجموعه متناظرشان اضافه میکنیم:
از آنجا که میخواهیم کراولر را صرفاً به آدرسهای محلی محدود کنیم، کد زیر را نیز درج میکنیم تا URL-های جدید را به صفمان اضافه کنیم:
اگر میخواهید همه URL-ها را کراول کنید:
هشدار: روشی که برنامه هم اینک استفاده میکند و همه لینکهای خارجی را پردازش میکند به مدت زمان زیادی نیاز دارد. همچنین در صورت پردازش وبسایتهایی که مجوز لازم را ندارید احتمالاً با مشکل مواجه خواهید شد. بنابراین این کار را با مسئولیت خودتان انجام دهید.
کد کامل برنامه به صورت زیر است:
بدین ترتیب ما یک ابزار ساده برای کراول کردن یک وبسایت و نگاشت همه URL-های پیدا شده ساختهایم.
سخن پایانی
شما میتوانید از این کد استفاده کنید و آن را بهبود بدهید. برای نمونه میتوانید برنامه را طوری تغییر دهید که در صفحههای وب به دنبال آدرسهای ایمیل و یا شمارههای تلفن بگردد. حتی میتوانید این کارکرد را با افزودن آرگومانهای خط فرمان، گزینهای برای تعریف فایلهای خروجی، محدودسازی عمق جستجو و موارد دیگر بهبود بدهید. برای کسب اطلاعات بیشتر در مورد روش تغییر اینترفیسها برای پذیرش آرگومانهای خط فرمان به این آموزش مراجعه کنید:
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی پایتون Python
- گنجینه آموزشهای برنامهنویسی پایتون (Python)
- مجموعه آموزشهای برنامهنویسی
- زبان برنامه نویسی پایتون (Python) — از صفر تا صد
- آموزش پایتون (Python) — مجموعه مقالات جامع وبلاگ فرادرس
==
عالیییییییییییییییی