ساخت WebScraper سی شارپ

لرن سایت,آموزش برنامه نویسی سی شارپ,آموزش طراحی سایت,آموزش برنامه نویسی اندروید,آموزش SQL c# android php jquery,قالب سایت

شما اینجا هستید : صفحه اصلی

با عضویت در کانال تلگرامی لرن سایت ، اولین فردی باشید که از تخفیفات و مطالب جدید خبردار می شوید !

ساخت WebScraper سی شارپ

ساخت webscraper سی شارپ

امروز نحوه استفاده از داده های سایت هایی که API یا وب سرویسی برای گرفتن اطلاعات در نظر نگرفته اند را بصورت کامل به شما آموزش می دهیم .

اگر سایتی وب سرویسی را برای استفاده از اطلاعات ارائه ندهد چه راهی برای گرفتن و استفاده از اطلاعات داریم ؟ این امر توسط WebScraping مقدور است؛ اکثر سایت ها API ای را جهت استفاده از داده های سایت دارند اما برای استفاده از داده های سایت هایی که API ندارند باید توسط اسکرپ ، اطلاعات را از سایت خارج کنیم ، اما چطور؟ برای یادگیری با لرن سایت همراه باشید.

دید کلی از مطلب :
در این مقاله Scraper ای را در کنسول اپلیکیشن ( Console Application ) برای سایت Yellowpages می سازیم و از این سایت اطلاعات استخراج می کنیم که توسط HtmlAgilityPack اینکار انجام می شود و همچنین با DOM صفحات نیز آشنا می شویم .

 

توضیح Document Object Model در صفحه وب :
برای WebScraping ما ابتدا نیاز به درک چیستی DOM در صفحه وب داریم ، پس به سایت Yellowpages.Com رفته و درباره هر آنچه که میخواهید جستجو کنید . ما درباره Software in sydney سرچ می کنیم. شما نتایجی را مطابق شکل زیر مشاهده می کنید.

 

 

هم اکنون می رویم تا Document Object Model برای این سایت توضیح داده و این موضوع را درک کنیم ، برای نمونه ما می خواهیم نام عنوان های نتایج را بگیریم ، برای مثال موس را روی عنوان “Teach in a Sec” برده و راست کلیک کرده سپس “Inspect” را کلیک کنید. صفحه ای مانند صفحه زیر را مشاهده خواهید کرد که المنت هایلایت شده است.

اکنون می توان سلسله مراتب المنت ها را در اینجا مشاهده کرد. متن مورد نظر ما در “<a>” است و ما باید از آن استفاده کنیم. کد هایی که در مرورگر رندر شده است کد های اچ تی ام ال است، بنابراین برای تمام المنت های اچ تی ام ال ID یا CLASS ای وجود دارد که منحصر به فرد آن المنت است و می تواند توسط آن ، المنت را شناسایی کرد. پس، اگر نگاهی دقیق بیاندازید یا المنت های دیگر را به صورت مشابه بررسی کنید، خواهید دید که همه عنوان ها دقیقا دارای یک کلاس هستند. بنابراین، با استفاده از نام کلاس و همچنین، نام المنت، ما می توانیم به راحتی تمام اسامی Header ( عناوین ) را در صفحه yellowpages بدست آوریم. به تصویر پایین توجه کنید.

 

 

حالا ما می خواهیم ویژوال استودیو را باز کنیم و WebScrapping را واقعا انجام دهیم !

  1. به Visual Studio بروید
  2. . یک برنامه Console در C # ایجاد کنید.
  3. به Solution Explorer بروید و روی رفرنس ها راست کلیک کرده و روی Manage Nuget Pack کلیک کنید و سپس “HtmlAgilityPack” جستحو کنید و آن را نصب کنید.

HtmlAgilityPack پکیجی در C # است که ما را قادر به جستجو  Document Object Model می کند و هر گونه اطلاعاتی را که می خواهیم استخراج می کند. ما این را در عمل بیشتر خواهیم دید.

پس از نصب بسته ، به فایل “Program.cs” بروید و از کد زیر استفاده کنید تا وب Scraper ما را اجرا کند.

یک نمونه از “HtmlWeb” ایجاد کنید که HTML را از نشانی اینترنتی داده شده با استفاده از HTTP بارگذاری می کند.

 

            HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
            HtmlAgilityPack.HtmlDocument doc = web.Load("https://www.yellowpages.com/search?search_terms=Software&geo_location_terms=Sydney%2C+ND");

 

ما قصد داریم از کلاس مشترک عنوان ها ( که دربالا هم در این باره توضیح داده شد ) برای گرفتن عنوان ها استفاده کنیم ، بنابرین کد زیر را بنویسید :

            var headernames = doc.DocumentNode.SelectNodes("//a[@class='business-name']").ToList();

 

توجه داشته باشید که ما از دو “/” و سپس نام المنت که شناسایی و همچنین نام کلاس که آن را نیز از Document Object Model  شناسایی کرده ایم ، استفاده و آن را به لیست اضافه کردیم، همچنین می توانیم از مزایای LINQ ، پکیج HtmlAgilityPack نیز استفاده کنیم ، به همین دلیل بستگی به نیازهای شما هر آنچه که بخواهید می توانید کدنویسی کنید..

اکنون، در مرحله نهایی، به سادگی برای لیست حلقه تعریف کنید و از ویژگی “InnerText” هر آیتم برای گرفتن نام آنها استفاده کنید.

 foreach(var item in headernames)
            {
                Console.WriteLine(item.InnerText);
            }

اکنون اگر برنامه را اجرا کنید ، تمام عنوان هایی که ما در صفحه وب شناسایی کرده ایم را دریافت خواهید کرد. نتیجه زیر را ببینید.

می توانید مشاهده کنید که ما با موفقیت یک وب Scraper در C # ایجاد کردیم که اطلاعات را از yellowpages بر اساس سناریوی ما بیرون می آورد.

دیگه چی؟

اکنون، به روش مشابه،  شما می توانید نتایجی را که در صفحه بعدی این وب سایت قرار دارد، دریافت کنید. برای اینکار همیشه مراقب تغییر آدرس URL صفحه باشید. شما یک سرنخ از آنچه شما واقعا نیاز دارید را توسط لینک دریافت می کنید. به عنوان مثال، شما می خواهید نتایج صفحه دوم را نیز بگیرید، بنابراین شما URL زیر را در روش “HtmlWeb.Load ()” بارگذاری کنید و همان اصل بالا را دنبال می کنید.کافیست به page=2 آخر لینک توجه کنید  ! با تغییر این عدد شما به صفحات دیگر نیز دسترسی خواهید داشت .

 

 

همچنین، شما می توانید این را در برنامه های دسکتاپ استفاده کنید که در آن نام شهر و شرایط جستجو را وارد و نتیجه را دریافت کنید ، کافیست “Software” را با {0} جایگزین کنید و با استفاده از روش string.format ، کلمه ای که می خواهید را به URL انتقال دهید. سپس، رکوئست را بفرستید و در نهایت تمام نتایج مربوط به آن را با توجه به ورودی دریافت خواهید کرد.

ما در نهایت ، اولین اسکنر وب خود را در C # با استفاده از HtmlAgilityPack ایجاد کردیم ، قابل ذکر است کنسول یا ویندوز فرم فرقی ندارد و می توانید توسط اموزش بالا ، برنامه خود را در ویندوز فرم نیز پیاده کنید.

 

لذت ببرید!

5/5 - (2 امتیاز)
اگه مطلب خوشتون اومد پس لطفا به اشتراک بذارین تا بقیه هم خوششون بیاد :)

نظرات

مشترک شدن
اطلاع رسانی از :
guest
5 نظرات
Inline Feedbacks
View all comments
علی
علی
4 سال گذشته

سلام خسته نباشید من نیاز به یک اسکرپر حرفه ای دارم چون آپشنای زیادی میخوام لازمه بصورت مداوم آپدیتش کنم شما کتابچه آنلاینی دارید بفرستید که فقط اسکرپ نویسی یاد داده باشه؟!

محمد اکبری شهابی
محمد اکبری شهابی
5 سال گذشته

سلام من کتابخانه HtmlAgilityPack رو نمیتونم نصبش کنم . مراحل نصبش رو از اینترنت دانلود کردم ولی مشکل نصب دارم هنوز. لطف کنید تو روش نصبش راهنماییم کنید .
ممنون

محمد
محمد
5 سال گذشته

درود
لطفاً برای کتابخانه HtmlAgilityPack آموزش های زیادی بذارین خیلی کتابخانه خوب و مفیدی هست.