Web Scraping หรือที่เรียกว่าการรวบรวมข้อมูลเว็บ การเก็บเกี่ยวเว็บ หรือการขูดข้อมูล ใช้สำหรับแยกข้อมูลจากเว็บไซต์ เครื่องมือขูดเว็บใช้ตัวเลือกข้อมูลต่างๆ เช่น ตัวเลือก CSS, XPath หรือทั้งสองอย่างนี้เพื่อดึงข้อมูลจากหน้าเว็บ ตัวเลือกทั้งสองนี้มีประสิทธิภาพในการรวบรวมและวิเคราะห์ข้อมูลจากเว็บ บทความนี้กล่าวถึงวิธีสร้างเว็บสแครปเปอร์ใน C# โดยเฉพาะข้อมูลเกี่ยวกับการนำทาง HTML, XPath Query และ CSS Selector
- การกำหนดค่าไลบรารี C# Web Scraping
- การขูดเว็บด้วยการนำทาง HTML ใน C #
- การขูดเว็บโดยใช้ XPath Query ใน C #
- การขูดเว็บด้วย CSS Selector ใน C#
การกำหนดค่าไลบรารี C# Web Scraping
Aspose.HTML for .NET คือไลบรารีการขูดเว็บที่สามารถกำหนดค่าได้ง่ายๆ โดยดาวน์โหลดไฟล์ DLL อ้างอิงจากส่วน New Releases หรือเรียกใช้คำสั่งการติดตั้ง NuGet ต่อไปนี้ :
PM> Install-Package Aspose.Html
การขูดเว็บด้วยการนำทาง HTML ใน C
คุณสามารถใช้คุณสมบัติต่างๆ ของคลาส Node เพื่อนำทางเอกสาร HTML ข้อมูลโค้ดด้านล่างอธิบายวิธีนำทางเว็บเพจ HTML ใน C#:
// เตรียมรหัส HTML
var html_code = "<span>Hello</span> <span>World!</span>";
// เริ่มต้นเอกสารจากรหัสที่เตรียมไว้
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
// รับการอ้างอิงถึงลูกคนแรก (ช่วงแรก) ของ 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 ใน C
คุณสามารถใช้ตัวกรองที่กำหนดเองได้โดยใช้วัตถุอินเทอร์เฟซ 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
}
}
}
การขูดเว็บโดยใช้ XPath Query ใน C
สามารถใช้ XPath เพื่อดึงข้อมูลจากเอกสาร HTML ข้อมูลโค้ดต่อไปนี้อธิบายวิธีใช้ XPath Query สำหรับการขูดเว็บใน C #:
// เตรียมรหัส 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 ลูกทั้งหมดจากองค์ประกอบที่มีแอตทริบิวต์ 'คลาส' เท่ากับ 'ความสุข':
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 Selector ใน C#
คุณสามารถสร้างรูปแบบการค้นหาเพื่อจับคู่องค์ประกอบในแผนผังเอกสารตามไวยากรณ์ของตัวเลือก CSS ข้อมูลโค้ดด้านล่างอธิบายวิธีการขูดเว็บด้วย CSS Selector ใน C#:
// เตรียมรหัส 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 ที่แยกองค์ประกอบทั้งหมดที่มีแอตทริบิวต์ 'คลาส' เท่ากับ 'มีความสุข' และองค์ประกอบย่อย SPAN
var elements = document.QuerySelectorAll(".happy span");
// วนซ้ำรายการองค์ประกอบที่เป็นผลลัพธ์
foreach (Aspose.Html.HTMLElement element in elements)
{
System.Console.WriteLine(element.InnerHTML);
// เอาท์พุท: สวัสดี
// เอาท์พุต: โลก!
}
}
รับใบอนุญาตฟรี
คุณสามารถขอ ใบอนุญาตชั่วคราวฟรี เพื่อประเมิน API ได้อย่างเต็มประสิทธิภาพ
บทสรุป
ในบทความนี้ คุณได้เรียนรู้เกี่ยวกับไลบรารีการขูดเว็บ C#, Aspose.HTML for .NET ซึ่งมีหลายวิธีในการสร้างเว็บขูดใน C# โดยจะกล่าวถึงการนำทาง HTML, XPath Query รวมถึงวิธีการเลือก CSS เพื่อให้บรรลุความต้องการของคุณ อย่างไรก็ตาม ในกรณีที่คุณต้องการหารือเกี่ยวกับข้อกังวลหรือคำถามของคุณ โปรดเขียนถึงเราที่ ฟอรัม