Web Scraping using C#

Web Scraping یک تکنیک است که برای استخراج داده‌ها از وب‌سایت‌ها استفاده می‌شود. این تکنیک به خودکار کردن فرآیند استخراج داده‌ها از وب‌سایت‌ها و HTML فایل‌ها کمک می‌کند. به عنوان یک توسعه‌دهنده C#، ما می‌توانیم به راحتی داده‌ها را بررسی کرده، ضبط و استخراج کنیم، مانند تصاویر، ویدیو، صدا و غیره، از صفحات وب. در این مقاله، ما خواهیم آموخت که چگونه وب‌اسکرپینگ را با تجزیه HTML با استفاده از C# انجام دهیم.

موضوعات زیر در این مقاله پوشش داده خواهند شد:

API خزش وب C#

برای وب اسکرپینگ از فایل‌های HTML یا URL ها، ما از API Aspose.HTML for .NET استفاده خواهیم کرد. این یک API پیشرفته پردازش HTML است که به شما اجازه می‌دهد اسناد HTML را بدون نیاز به نرم‌افزار خارجی تولید، ویرایش، استخراج داده، تبدیل و رندر کنید. لطفاً یا دانلود DLL این API را انجام دهید یا آن را با استفاده از NuGet نصب کنید.

PM> Install-Package Aspose.Html

خواندن و استخراج HTML با استفاده از C#

ما می‌توانیم HTML را از هر سند HTML با دنبال کردن مراحل زیر بخوانیم و استخراج کنیم:

  1. یک سند HTML را با استفاده از کلاس HTMLDocument بارگذاری کنید.
  2. Inner HTML فایل را در کنسول نمایش دهید.

کد نمونه زیر نشان می‌دهد که چگونه محتویات HTML را با استفاده از C# بخوانیم و استخراج کنیم.

// این مثال کد نشان می‌دهد که چگونه محتوای مدرک HTML را نمایش دهیم
// Load HTML document
var document = new HTMLDocument(@"D:\Files\html\input.html");

// Show inner HTML of the document
Console.WriteLine(document.Body.InnerHTML);
HTML را با استفاده از C# بخوانید و استخراج کنید.

Read and Extract HTML using C#.

به طور مشابه، می‌توانیم HTML را از وب‌سایت‌های زنده خوانده و استخراج کنیم همان‌طور که در زیر نشان داده شده است:

// این نمونه کد نشان می‌دهد که چگونه محتویات را از URL یک وب‌سایت زنده نمایش دهید.
// Initialize Url
Url url = new Url("https://en.wikipedia.org/wiki/HTML");

// بارگذاری فایل HTML با استفاده از نمونه Url
HTMLDocument document = new HTMLDocument(url);

// محتوای داخلی HTML فایل را به کنسول نمایش دهید
Console.WriteLine(document.Body.InnerHTML);

معاینه عناصر سند با استفاده از C#

ما می‌توانیم سند و عناصر آن را با دنبال کردن مراحل زیر بررسی کنیم:

  1. یک سند HTML را با استفاده از کلاس HTMLDocument بارگذاری کنید.
  2. المنتظر HTML سند را دریافت کنید.
  3. اولین/آخرین عناصر عنصر HTML را دریافت کنید.
  4. جزئیات عنصر را نمایش دهید، مانند TagName، TextContent.

کد نمونه زیر نشان می‌دهد که چگونه می‌توان عناصر سند را با استفاده از C# بازرسی کرد.

// این مثال کد نشان می‌دهد که چگونه عناصر HTML را بازرسی کنید.
// یک سند را از یک فایل بارگذاری کنید
string documentPath = @"D:\Files\html\input.html";
HTMLDocument document = new HTMLDocument(documentPath);

// عنصر html سند را دریافت کنید 
var element = document.DocumentElement;
Console.WriteLine(element.TagName); // HTML

// آخرین عنصر عنصر html را بگیرید
element = element.LastElementChild;
Console.WriteLine(element.TagName); // BODY

// بدست آوردن نخستین عنصر از عنصر بدنه
element = element.FirstElementChild;
Console.WriteLine(element.TagName); // H1
Console.WriteLine(element.TextContent); // Header 1

یافتن عنصر خاص با استفاده از فیلترها در C#

ما می‌توانیم از فیلترهای سفارشی برای پیدا کردن یک عنصر خاص مانند دریافت تمام تصاویر، لینک‌ها و غیره استفاده کنیم. به این منظور، API رابط TreeWalker را فراهم می‌کند. این رابط اجازه می‌دهد تا یک درخت سند یا زیر درخت آن را با استفاده از نمای سند که با پرچم‌های whatToShow و فیلتر (در صورت وجود) تعریف شده است، پیمایش کنیم. ما می‌توانیم عناصر خاصی را با استفاده از فیلترها با دنبال کردن مراحل زیر پیدا کنیم:

  1. فیلترها را با استفاده از کلاس NodeFilter تعریف کرده و متد AcceptNode() را override کنید.
  2. یک مدرک HTML را با استفاده از کلاس HTMLDocument بارگذاری کنید.
  3. Call the CreateTreeWalker() method. It takes root node, what to show, and NodeFilter as arguments.

کد نمونه زیر نشان می‌دهد چگونه می‌توان عناصر خاصی را با استفاده از C# پیدا کرد.

// این مثال کد نشان می‌دهد که چگونه می‌توان داده‌ها را با استفاده از فیلترها پرس و جو کرد.
// Load an HTML document
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");

// برای شروع ناوبری HTML ما نیاز به ایجاد یک نمونه از TreeWalker داریم.
// پارامترهای مشخص شده به این معنی است که از ریشه سند شروع به راه رفتن می کند،
// تکرار تمام نودها و استفاده از پیاده‌سازی سفارشی ما از فیلتر
using (var iterator = document.CreateTreeWalker(document, Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
    while (iterator.NextNode() != null)
    {
        // از آنجا که ما از فیلتر خود استفاده می‌کنیم، نود فعلی همیشه یک نمونه از HTMLImageElement خواهد بود.
        // پس، ما به اعتبارسنجی‌های اضافی در اینجا نیازی نداریم.
        var image = (HTMLImageElement)iterator.CurrentNode;

        System.Console.WriteLine(image.Src);
        // output: image1.png
        // output: image2.png
    }
}
// این مثال کد نشان می‌دهد که چگونه فیلتر نود را تعریف کنیم.
class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // فیلتر فعلی همه عناصر را نادیده می‌گیرد، به جز عناصر IMG.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

اطلاعات پرس و جو از HTML با استفاده از C#

ما همچنین می‌توانیم از XPath Query برای پرسش داده‌ها از یک سند HTML استفاده کنیم با دنبال کردن مراحل زیر:

  1. یک سند HTML را با استفاده از کلاس HTMLDocument بارگذاری کنید.
  2. متد Evaluate() را فراخوانی کنید. این متد رشته عبارت XPath، سند و نوع را به عنوان آرگومان می‌گیرد.
  3. در نهایت، از طریق نودهای حاصل پیمایش کنید و متن را نمایش دهید

نمونه کد زیر نشان می‌دهد که چگونه با استفاده از C# داده‌ها را با پرس و جوهای XPath جستجو کنیم.

// این مثال کد نشان می‌دهد که چگونه داده‌ها را با استفاده از کوئری XPath جستجو کنید.
// Prepare an HTML code
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// یک سند را بر اساس کد آماده شده راه‌اندازی کنید.
HTMLDocument document = new HTMLDocument(code, ".");

// اینجا ما عبارت XPath را ارزیابی می‌کنیم که در آن تمام عناصر SPAN فرزند را انتخاب می‌کنیم. 
// از عناصری که ویژگی 'class' آنها برابر با 'happy' است:
var result = document.Evaluate("//*[@class='happy']//span",
    document,
    null,
    Aspose.Html.Dom.XPath.XPathResultType.Any,
    null);

// روی گره‌های ایجاد شده تکرار کنید
for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
{
    System.Console.WriteLine(node.TextContent);
    // output: سلام
    // output: World!
}

استخراج با استفاده از انتخاب‌گر CSS در C#

ما می‌توانیم محتوای HTML را با استفاده از انتخاب‌گرهای CSS استخراج کنیم. برای این منظور، API متد QuerySelectorAll() را ارائه می‌دهد که امکان ناوبری در یک سند HTML و جستجوی عناصر مورد نیاز را فراهم می‌کند. این متد انتخاب‌گر کوئری را به‌عنوان پارامتر می‌گیرد و یک NodeList تطبیق یافته از تمام عناصر را برمی‌گرداند. ما می‌توانیم با پیروی از مراحل زیر با استفاده از انتخاب‌گرهای CSS جستجو کنیم:

  1. یک سند HTML را با استفاده از کلاس HTMLDocument بارگذاری کنید.
  2. Call the QuerySelectorAll() method. It takes the query selector as an argument.
  3. در نهایت، از طریق لیست حاصل از عناصر حلقه بزنید.

کد نمونه زیر نحوه استخراج محتوای HTML با استفاده از انتخاب‌گرهای CSS در C# را نشان می‌دهد.

// یک سند را بر اساس کد آماده شده راه اندازی کنید.
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");

// اینجا یک انتخابگر CSS ایجاد می‌کنیم که تمام عناصر div را استخراج می‌کند.
var elements = document.QuerySelectorAll("div");

// روی لیست نتیجه‌دار عناصر تکرار کنید
foreach (Aspose.Html.HTMLElement element in elements)
{
    System.Console.WriteLine(element.InnerHTML);
}

یک مجوز رایگان بگیرید

لطفاً با درخواست a free temporary license بدون محدودیت‌های ارزیابی، API را امتحان کنید.

نتیجه گیری

در این مقاله، ما یاد گرفتیم چگونه:

  • محتوای یک سند HTML را با استفاده از C# بخوانید و استخراج کنید؛
  • مورد عنصرهای سند را بررسی کنید و یک عنصر خاص را از HTML پیدا کنید؛
  • داده‌های خاص جستجو و استخراج داده‌ها با استفاده از انتخاب‌گر CSS.

علاوه بر این، می‌توانید اطلاعات بیشتری درباره Aspose.HTML برای API .NET با استفاده از documentation بیابید. در صورت وجود هر گونه ابهام، لطفاً با کمال میل با ما در forum تماس بگیرید.

به همچنین ببینید