توضیحات کامل در مورد فایل
دانلود سورس کد خزنده وب (Web Crawler) در اکسل با VBA برای استخراج لینکهای داخلی سایت
در این پست، قصد داریم یک کد بسیار کاربردی و جالب به زبان VBA را معرفی کنیم که با اجرای آن در محیط اکسل، میتوانید یک خزنده وب (Web Crawler) ساده بسازید. این خزنده بهطور خودکار به یک آدرس سایت مشخص شده متصل میشود، صفحات داخلی آن را بررسی میکند و تمامی لینکهایی که به دامنه اصلی تعلق دارند را استخراج و در یک شیت مجزا ذخیره میکند. این ابزار برای کسانی که به دنبال تحلیل ساختار لینکهای داخلی سایت، بررسی وضعیت سئو یا جمعآوری اطلاعات اولیه از صفحات وب هستند، میتواند بسیار مفید باشد.
ساختار اصلی کد بر پایه دو مفهوم مهم "صف لینکها برای بررسی" و "لینکهای بازدیدشده" طراحی شده است. ابتدا آدرس اصلی سایت توسط کاربر وارد میشود، سپس برنامه این لینک را به صف اضافه کرده و شروع به بازدید از آن میکند. محتوای HTML هر صفحه توسط شیء MSXML2.ServerXMLHTTP
دریافت میشود و لینکهای داخل آن با استفاده از شیء htmlfile
استخراج میگردند. تنها لینکهایی که به دامنه اصلی تعلق دارند وارد صف میشوند و در نتیجه از رفتن به سایتهای خارجی جلوگیری میشود.
یکی از نکات مهم این کد، استفاده از ساختار زمانبندی Application.OnTime
است که باعث میشود خزیدن به صورت مرحلهبهمرحله و با فاصله زمانی مشخص انجام شود. این تأخیر قابل تنظیم بوده و از طریق TextBox دوم در فرم (UserForm1) توسط کاربر تعیین میشود. به این ترتیب، میتوان سرعت خزیدن را کنترل کرد تا فشار زیادی بر سرور سایت هدف وارد نشود و از بلاک شدن IP جلوگیری شود. همچنین در هر مرحله، لینک جدید در شیت اکسل با قالببندی مناسب ثبت شده و ظاهر شیت نیز بهصورت زیبایی طراحی شده است.
از قابلیتهای جانبی این ابزار میتوان به توقف خزیدن در هر لحظه اشاره کرد. با اجرای ماکروی StopCrawling
، فرآیند خزیدن متوقف میشود و پیغامی برای کاربر نمایش داده میشود. علاوه بر این، اگر لینک ورودی خالی باشد یا خطایی در بارگذاری صفحات رخ دهد، کد دارای مدیریت خطا بوده و کاربر را مطلع میسازد. همچنین با اجرای ماکرو، در صورت وجود شیت قبلی با نام "Crawled Links"، آن شیت حذف و نسخه جدیدی با ساختار بهینه ایجاد میشود.
نمونه تصاویر در زمان اجرا
این کد VBA که برای اجرای آن به یک فایل اکسل و یک فرم به نام UserForm1
نیاز دارید، یک خزنده وب (Web Crawler) ساده را در محیط Excel پیادهسازی میکند. این خزنده با دریافت آدرس یک وبسایت، شروع به بازدید از صفحات لینکشده داخل آن میکند و تمام لینکهایی که به دامنه اصلی تعلق دارند را جمعآوری کرده و در یک شیت ذخیره میکند.
🎯 کاربرد کد
با استفاده از این ابزار میتوانید:
-
لینکهای داخلی یک وبسایت را جمعآوری کنید.
-
ساختار لینکدهی صفحات را بررسی نمایید.
-
دادههای اولیه برای سئو یا تحلیل ساختار سایت جمعآوری کنید.
🧩 اجزای اصلی کد
1. متغیرهای سراسری
Dim http As Object, html As Object, links As Object, link As Object Dim url As String, baseUrl As String Dim visitedLinks As Collection, queue As Collection Dim ws As Worksheet, rowCounter As Long Dim nextRun As Date, t As Integer
این متغیرها برای مدیریت صف لینکها، بررسی لینکهای بازدیدشده، زمانبندی، و ارتباط با وب استفاده میشوند.
2. تابع Contains
Function Contains(col As Collection, key As String) As Boolean
بررسی میکند که آیا یک لینک قبلاً در مجموعه (Collection
) اضافه شده یا نه. برای جلوگیری از بازدید تکراری لینکها استفاده میشود.
3. زیرروال StopCrawling
Sub StopCrawling()
برای توقف خزیدن به صورت دستی با مقداردهی t = 0
استفاده میشود.
4. زیرروال StartCrawling
Sub StartCrawling()
شروع فرآیند خزیدن است. ابتدا آدرس سایت را از UserForm1.TextBox1
دریافت میکند، شیت قبلی را حذف کرده و یک شیت جدید با عنوان Crawled Links
ایجاد میکند، سپس تابع CrawlNextLink
را برای شروع خزش فراخوانی میکند.
5. زیرروال BeautifySheet
Sub BeautifySheet()
ظاهر شیت را زیبا میکند: تنظیم عرض ستونها، رنگبندی راهراه سطرها، قفل کردن ردیف اول، اعمال فیلتر و تنظیم رنگ عنوان.
6. زیرروال CrawlNextLink
Sub CrawlNextLink()
مهمترین بخش کد. در هر مرحله:
-
یک لینک از صف (
queue
) برداشته میشود. -
در صورتی که قبلاً بازدید نشده، با استفاده از
MSXML2.ServerXMLHTTP.6.0
محتوای HTML دریافت میشود. -
لینکهای موجود در آن استخراج و به صف اضافه میشوند (در صورتی که به دامنه اصلی تعلق داشته باشند).
-
لینک فعلی در شیت ذخیره میشود.
-
اجرای مرحله بعدی خزیدن با استفاده از
Application.OnTime
و با تأخیر زمانی مشخص (ازTextBox2
) برنامهریزی میشود.
🧪 پیشنیازها
-
ایجاد فرم UserForm1 با دو تکستباکس:
-
TextBox1
: برای وارد کردن آدرس سایت (مثلاًhttps://example.com
) -
TextBox2
: برای وارد کردن تأخیر بین خزشها (بر حسب ثانیه)
-
-
فعال بودن مرجع Microsoft HTML Object Library برای تجزیهی HTML (در صورت استفاده از
htmlfile
)
برای شما کاربران عزیز پیشنهاد دانلود داده می شود.