آموزش وب اسکرپینگ با سی شارپ – مقدماتی و به بیان ساده
وب اِسکرِپینگ، تکنیکی است که در آن، از رباتها به منظور استخراج محتوا و دادههای وبسایتی دلخواه، استفاده میشود. این کار به صورت دستی نیز قابل انجام است، اما خودکار کردن این فرایند، علاوه بر سرعت بیشتر و بهینگی، خطای کمتری را به دنبال دارد. عملکرد وب اِسکرِپینگ به گونهای است که کدهای HTML نهفته در صفحات وب را بیرون میکِشد و دادههای موجود در این صفحات، که ممکن است ساختاری ضعیف و غیرجدولی داشته باشند را بهصورت قالبی ساختاریافته در میآورد که برای کاربردهای گوناگون، مناسبتر خواهد بود. وب اسکرپینگ با سی شارپ فرایندی فراتر از جمعآوری دادهها است و میتواند در بایگانی دادهها و ردیابی آنلاین تغییرات آنها نیز به ما کمک کند. در این مطلب، به بیانی ساده و بهصورت گام به گام، آموزش وب اسکرپینگ با سی شارپ را با استفاده از کتابخانههایی، نظیر «سلنیوم» (Selenium) و Html Agility Pack، خواهیم داشت و با ایجاد یک خزندهوب، دادههای مورد نظر را از یک وب سایت نمونه استخراج میکنیم. همچنین مفاهیم پیشرفتهتری مانند اسکرپینگ موازی، اسکرپینگ وبسایتهای پویا و راهکارهایی به منظور پرهیز از بلاک شدن را نیز بررسی خواهیم کرد.
آشنایی با وب اسکرپینگ
وب اسکرپینگ، فرایند استخراج داده از وبسایتها با استفاده از ابزارها و نرمافزارهای خودکار است. در دنیای پُرشتاب و دادهمحور امروز، وب اِسکرِپینگ به ابزاری ضروری برای کسب و کارها، محققان و تحلیلگران تبدیل شده است تا دیدگاههای ارزشمندی را از دادههای حجیم موجود در اینترنت، بیرون بِکشند.
تحلیلهای صورت گرفته با استفاده از دادههای Scrape شده، در مقاصد مختلفی مانند شناسایی مشتریان بالقوه، اطلاع از روند قیمتگذاری در بازار، تحلیل احساسات مشتری و دهها مورد دیگر قابل استفاده هستند. Web Scraping به طور روز افزون توسط محققان، به منظور ایجاد «مجموعه دادهها» (Data Sets)، برای پروژههایی مانند «متنکاوی» (Text Mining) و غیره استفاده میشود. این دادهها، ممکن است مجموعهای از مقالات ژورنالی یا متون دیجیتالی باشند.
سی شارپ (و به طور کلی دات نت)، تمامیابزارها و کتابخانههای لازم برای پیادهسازی وب اِسکرِپینگ را فراهم و به شما کمک میکند تا به سرعت پروژه Scraper خود را پیادهسازی و دادههای مورد نظر را جمعآوری کنید.
یکی از موضوعاتی که در این نوشتار به آن پرداخته شده است، تکنیکهای مختلف برای پیشگیری از «انسداد» (Block شدن) و همینطور محدود شدن توسط سرور است. این قضیه، به عنوان یکی از موانع اصلی در مبحث وب اِسکرِپینگ، بهشمار میرود.
امروزه، شرکتهای زیادی هستند که از مزایای دادههای جمعآوری شده از وب، بهره میگیرند. سی شارپ، یکی از مناسبترین زبانهای برنامهنویسی برای پیاده سازی Web Scraping است.
کتابخانه Html Agility Pack، محبوبترین کتابخانه Scraper برای سی شارپ است. با استفاده از این کتابخانه، میتوانید صفحات وب مورد نظر را دانلود و محتوای HTML آنها را تجزیه کنید، به طوریکه، پس از انتخاب عناصر HTML، بتوان دادههای مورد نیاز را از آنها استخراج کرد.
Selenium WebDriver، کتابخانهی دیگری است که از چندین زبان برنامهنویسی پشتیبانی میکند و به شما امکان میدهد تستهای خودکار برای وب اپلیکیشن بنویسید. همچنین میتوانید از آن برای اهداف وب اسکرپینگ نیز استفاده کنید.
پیش نیازهای Web Scraping با C#
در این بخش به معرفی و شرح پیشنیازهایی پرداخته شده است که برای وب اسکریپینگ با سی شارپ مورد نیاز هستند. این موارد در زیربخشهایی جداگانه شامل دانلود و راهاندازی محیط و ابزارهای اولیه و همچنین ایجاد پروژه در سی شارپ، ارائه شده است.
تنظیم و راهاندازی محیط برنامه نویسی وب اسکرپینگ با سی شارپ
به منظور پیادهسازی وب اِسکرِپینگ با سی شارپ، لازم است تا پیش نیازهای زیر را فراهم کنیم:
- دانت نت نسخه ۷ (یا بالاتر): توصیه میشود که از جدیدترین نسخه دانت نت استفاده شود.
- محیط IDE برای کد نویسی C#: ویژوال استدیو کامیونیتی ۲۰۲۲، میتواند گزینه مناسبی برای Web Scraping با سی شارپ باشد. همچنین اگر گزینه کمحجمتری را ترجیح میدهید، میتوانید محیط ویژوال استدیو کد، به همراه افزونه C# را انتخاب کنید.
برای صرفه جویی در زمان، بهتر است بسته دات نت Coding Pack را دانلود و نصب کنید. با نصب این بسته، «ویژوال استودیو کد» (VSCode) به همراه افزونههای ضروری دات نت SDK را خواهید داشت. در غیر این صورت، میتوانید ابزارهای مورد نیاز را به صورت جداگانه، دانلود و نصب کنید.
اکنون، همه چیز برای Web Scraping با سی شارپ آماده است ولی برای اطمینان از اینکه دات نت را به درستی نصب کردهایم، میبایست پنجرهی پاورشل را باز کرده و دستورات زیر را در آن اجرا کنیم.
1dotnet --list-sdks
در صورتی که مشکلی وجود نداشته باشد، شماره نسخه دات نت SDK که روی سیستم نصب شده است، در خروجی چاپ میشود (ما در اینجا نسخه ۷٫۰٫۱۰۱ از دات نت SDK را برای وب اسکرپینگ با سی شارپ نصب کردیم).
در صورتی که بجای دستور بالا، پیغامیبا محتوای زیر نمایش داده شد،
1'dotnet' is not recognized as an internal or external command error
نیاز است که سیستم را ریستارت و مراحل فوق را دوباره امتحان کنیم. در صورت مشاهده مجدد این خطا، بهتر است که دات نت از روی سیستم حذف و دوباره نصب شود.
راه اندازی پروژه سی شارپ
یک «اپلیکیشن کنسول» (Console Application) را در ویژوال استدیو ایجاد میکنیم. به این صورت که ابتدا، یک پوشه خالی به نام SimpleWebScraper ، برای پروژهی Web Scraping با سی شارپ میسازیم.
1mkdir SimpleWebScraper
حالا، VSCode را باز میکنیم و پس از کلیک روی منوی File، گزینه Open Folder را انتخاب میکنیم (معادل کلید ترکیبی Ctrl+K Ctrl O).
در پنجره باز شده، پوشه SimpleWebScraper را انتخاب و صبر میکنیم تا ویژوال استدیو آن را باز کند. سپس با انتخاب گزینه Terminal از منویView که در نوار منوی اصلی وجود دارد، پنجره Terminal را نیز به ویژوال استدیو اضافه میکنیم.
در پنجره Terminal، دستور زیر را اجرا میکنیم:
1dotnet new console --framework net7.0
دستور بالا، یک پروژه کنسول .NET 7.0 را راهاندازی میکند. به بیان دقیقتر، یک فایل پروژه با فرمت .csprojو یک فایل C# به نام Program.csایجاد میشود. حالا، کد زیر را با محتویات موجود در Program.cs، جایگزین میکنیم.
1namespace SimpleWebScraper
2{
3 class Program
4 {
5 static void Main(string[] args)
6 {
7 Console.WriteLine("Hello, World!");
8
9 // scraping logic...
10 }
11 }
12}
این کد، نمونهای از یک اسکریپت ساده کنسول در سی شارپ است. توجه داشته باشیم که تابع Main()، شامل منطق وب اِسکرِپینگ با سی شارپ خواهد بود. با دستور زیر ، میتوانیم اسکریپت را اجرا کنیم:
1dotnet run
که باید خروجی زیر را چاپ کند:
"Hello, World!"
بسیار عالی، اسکریپت اولیه C#، همانطوری که انتظار میرفت بدون مشکل کار میکند و ما با خیال راحت میتوانیم مقدمات یادگیری Web Scraping با سی شارپ را ادامه دهیم.
چگونه اطلاعات یک وبسایت را جمع آوری کنیم؟
در این قسمت، وب اسکرپینگ با سی شارپ را در قالب ساخت برنامهای برای استخراج دادهها از وبسایت ScrapeMe یاد میگیریم. وبسایت ScrapeMe، فهرستی از عناصر الهام گرفته از شخصت کارتونی Pokemon را در قالب چندین صفحه به نمایش میگذارد. اسکریپت C#، به طور خودکار، داده مربوط به هر محصول را بازدید و استخراج میکند.