Web Scraping که به عنوان خزیدن وب، برداشت وب یا خراش داده نیز شناخته می شود، برای استخراج داده ها از وب سایت ها استفاده می شود. یک وب اسکراپر از انتخابگرهای مختلف داده مانند انتخابگرهای CSS، XPath یا هر دوی آنها برای استخراج داده ها از صفحات وب استفاده می کند. هر دوی این انتخابگرها برای جمع آوری و تجزیه و تحلیل اطلاعات از وب کارآمد هستند. این مقاله نحوه ایجاد یک اسکراپر وب در سی شارپ را پوشش می دهد، به ویژه اطلاعات مربوط به ناوبری HTML، XPath Query و CSS Selector.
- پیکربندی کتابخانه C# Web Scraping
- اسکرپینگ وب با پیمایش HTML در سی شارپ
- Scraping وب با استفاده از XPath Query در سی شارپ
- اسکرپینگ وب با انتخابگر CSS در سی شارپ
پیکربندی کتابخانه C# Web Scraping
Aspose.HTML for .NET یک کتابخانه اسکرپینگ وب است که به راحتی می توان با دانلود فایل های DLL مرجع از بخش New Releases یا اجرای دستور نصب زیر NuGet پیکربندی کرد. :
PM> Install-Package Aspose.Html
اسکرپینگ وب با پیمایش HTML در سی شارپ
شما می توانید از ویژگی های مختلف کلاس Node برای پیمایش اسناد HTML استفاده کنید. قطعه کد زیر نحوه پیمایش یک صفحه وب HTML در سی شارپ را توضیح می دهد:
// کد HTML را آماده کنید
var html_code = "<span>Hello</span> <span>World!</span>";
// یک سند را از کد آماده شده اولیه کنید
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
// مرجع اولین فرزند (اولین SPAN) BODY را دریافت کنید
var element = document.Body.FirstChild;
Console.WriteLine(element.TextContent); // output: Hello
// ارجاع به فضای خالی بین عناصر html را دریافت کنید
element = element.NextSibling;
Console.WriteLine(element.TextContent); // output: ' '
// ارجاع به عنصر دوم SPAN را دریافت کنید
element = element.NextSibling;
Console.WriteLine(element.TextContent); // output: World!
}
بازرسی از سند HTML و عناصر آن
API همچنین استفاده عمومی از ویژگی های پیمایش عنصر را فراهم می کند. قطعه کد زیر نحوه انجام یک بازرسی دقیق از عناصر مختلف API را نشان می دهد.
//یک سند را از یک فایل بارگیری کنید
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");
// مسیر فایل HTML منبع را در سیستم فایل محلی خود مشخص کنید
using (var document = new Aspose.Html.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
}
استفاده از فیلتر سفارشی برای Web Scraper در سی شارپ
میتوانید یک فیلتر سفارشی را با استفاده از یک شی رابط ITreeWalker یا INodeIterator همراه با یک پیادهسازی فیلتر سفارشی پیادهسازی کنید. قطعه کد زیر نحوه پیگیری فرآیند را توضیح می دهد:
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;
}
}
پس از اجرای یک فیلتر سفارشی، می توانید به سرعت در یک صفحه وب با کد زیر حرکت کنید:
var code = @"
<p>Hello</p>
<img src='image1.png'>
<img src='image2.png'>
<p>World!</p>";
// یک سند را بر اساس کد آماده شده اولیه کنید
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
// برای شروع ناوبری HTML باید یک نمونه از TreeWalker ایجاد کنیم.
// پارامترهای مشخص شده به این معنی است که از ریشه سند شروع به راه رفتن می کند، همه گره ها را تکرار می کند و از پیاده سازی سفارشی ما از فیلتر استفاده می کند.
using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
while (iterator.NextNode() != null)
{
// از آنجایی که ما از فیلتر خود استفاده می کنیم، گره فعلی همیشه نمونه ای از HTMLImageElement خواهد بود.
// بنابراین، ما در اینجا نیازی به اعتبارسنجی اضافی نداریم.
var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;
System.Console.WriteLine(image.Src);
// خروجی: image1.png
// خروجی: image2.png
}
}
}
Scraping وب با استفاده از XPath Query در سی شارپ
XPath می تواند برای استخراج داده ها از اسناد HTML استفاده شود. قطعه کد زیر نحوه استفاده از XPath Query را برای Scraping در سی شارپ توضیح می دهد:
// کد HTML را آماده کنید
var code = @"
<div class='happy'>
<div>
<span>Hello!</span>
</div>
</div>
<p class='happy'>
<span>World</span>
</p>
";
// یک سند را بر اساس کد آماده شده اولیه کنید
using (var document = new Aspose.Html.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);
// خروجی: سلام
// خروجی: جهان!
}
}
اسکرپینگ وب با انتخابگر CSS در سی شارپ
شما می توانید یک الگوی جستجو برای مطابقت با عناصر در درخت سند بر اساس دستور CSS Selectors ایجاد کنید. قطعه کد زیر نحوه انجام اسکراپینگ وب با انتخابگر CSS در سی شارپ را توضیح می دهد:
// کد HTML را آماده کنید
var code = @"
<div class='happy'>
<div>
<span>Hello</span>
</div>
</div>
<p class='happy'>
<span>World!</span>
</p>
";
// یک سند را بر اساس کد آماده شده اولیه کنید
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
// در اینجا ما یک انتخابگر CSS ایجاد می کنیم که تمام عناصری را که ویژگی 'class' برابر با 'happy' است و عناصر SPAN فرزند آنها را استخراج می کند.
var elements = document.QuerySelectorAll(".happy span");
// روی فهرست به دست آمده از عناصر تکرار کنید
foreach (Aspose.Html.HTMLElement element in elements)
{
System.Console.WriteLine(element.InnerHTML);
// خروجی: سلام
// خروجی: جهان!
}
}
مجوز رایگان دریافت کنید
میتوانید برای ارزیابی API در ظرفیت کامل، [مجوز موقت رایگان7 درخواست کنید.
نتیجه
در این مقاله با کتابخانه سی شارپ web scraping Aspose.HTML for .NET آشنا شدید که شامل چندین روش برای ایجاد وب اسکراپر در سی شارپ می باشد. برای دستیابی به نیازهای شما، ناوبری HTML، پرس و جوی XPath و همچنین روش انتخابگر CSS را مورد بحث قرار می دهد. با این حال، در صورت نیاز به بحث در مورد هر یک از نگرانی ها یا سؤالات خود، لطفاً در [تالار گفتمان8 برای ما بنویسید.