Web Scraping, také známý jako procházení webu, sklizeň webu nebo škrábání dat, se používá k extrahování dat z webových stránek. Webový škrabák používá různé selektory dat, jako jsou selektory CSS, XPath nebo oba, aby extrahoval data z webových stránek. Oba tyto selektory jsou účinné pro sběr a analýzu informací z webu. Tento článek popisuje, jak vytvořit webový škrabák v C#, konkrétně informace o HTML navigaci, XPath Query a CSS Selector.
- Knihovna C# Web Scraping
- Vytvořte Web Scraper v C#
- Použijte XPath Query k vytvoření Web Scraper v C#
- Použijte CSS Selector pro Web Scraping v C#
Knihovna C# Web Scraping
Aspose.HTML for .NET je webová knihovna scraping, kterou lze snadno nakonfigurovat stažením referenčních souborů DLL ze sekce New Releases nebo spuštěním následujícího instalačního příkazu NuGet :
PM> Install-Package Aspose.Html
Vytvořte Web Scraper v C#
K navigaci v dokumentech HTML můžete použít různé vlastnosti třídy Node. Níže uvedený fragment kódu vysvětluje, jak procházet webovou stránkou HTML v C#:
// Připravte HTML kód
var html_code = "<span>Hello</span> <span>World!</span>";
// Inicializujte dokument z připraveného kódu
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
// Získejte odkaz na prvního potomka (první rozpětí) TĚLA
var element = document.Body.FirstChild;
Console.WriteLine(element.TextContent); // output: Hello
// Získejte odkaz na mezery mezi prvky html
element = element.NextSibling;
Console.WriteLine(element.TextContent); // output: ' '
// Získejte odkaz na druhý prvek SPAN
element = element.NextSibling;
Console.WriteLine(element.TextContent); // output: World!
}
Kontrola HTML pomocí Web Scraper v C#
API také poskytuje obecné použití funkcí procházení prvků. Následující fragment kódu ukazuje, jak provést podrobnou kontrolu různých prvků rozhraní API.
//Načtěte dokument ze souboru
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");
// Zadejte cestu ke zdrojovému souboru HTML ve vašem lokálním systému souborů
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
// Získejte html prvek dokumentu
var element = document.DocumentElement;
Console.WriteLine(element.TagName); // HTML
// Získejte poslední prvek prvku html
element = element.LastElementChild;
Console.WriteLine(element.TagName); // BODY
// Získejte první prvek prvku těla
element = element.FirstElementChild;
Console.WriteLine(element.TagName); // H1
Console.WriteLine(element.TextContent); // Header 1
}
Použití vlastního filtru pro Web Scraper v C#
Vlastní filtr můžete implementovat pomocí objektu rozhraní ITreeWalker nebo INodeIterator spolu s implementací vlastního filtru. Následující fragment kódu vysvětluje, jak postupovat v tomto procesu:
class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
public override short AcceptNode(Aspose.Html.Dom.Node n)
{
// Aktuální filtr přeskočí všechny prvky kromě prvků IMG.
return string.Equals("img", n.LocalName)
? FILTER_ACCEPT
: FILTER_SKIP;
}
}
Po implementaci vlastního filtru můžete rychle procházet webovou stránkou pomocí následujícího kódu:
var code = @"
<p>Hello</p>
<img src='image1.png'>
<img src='image2.png'>
<p>World!</p>";
// Inicializujte dokument na základě připraveného kódu
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
// Pro spuštění HTML navigace potřebujeme vytvořit instanci TreeWalker.
// Zadané parametry znamenají, že začne chodit z kořenového adresáře dokumentu, iteruje všechny uzly a použije naši vlastní implementaci filtru
using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
while (iterator.NextNode() != null)
{
// Protože používáme vlastní filtr, aktuální uzel bude vždy instancí HTMLImageElement.
// Zde tedy nepotřebujeme další ověření.
var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;
System.Console.WriteLine(image.Src);
// výstup: image1.png
// výstup: image2.png
}
}
}
Použijte XPath Query k vytvoření Web Scraper v C#
XPath lze použít k extrahování dat z dokumentů HTML. Následující fragment kódu vysvětluje, jak používat XPath Query pro web scraping v C#:
// Připravte si HTML kód
var code = @"
<div class='happy'>
<div>
<span>Hello!</span>
</div>
</div>
<p class='happy'>
<span>World</span>
</p>
";
// Inicializujte dokument na základě připraveného kódu
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
// Zde vyhodnotíme výraz XPath, kde vybereme všechny podřízené prvky SPAN z prvků, jejichž atribut 'class' se rovná 'happy':
var result = document.Evaluate("//*[@class='happy']//span",
document,
null,
Aspose.Html.Dom.XPath.XPathResultType.Any,
null);
// Iterujte přes výsledné uzly
for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
{
System.Console.WriteLine(node.TextContent);
// výstup: Dobrý den
// výstup: Svět!
}
}
Použijte CSS Selector pro Web Scraping v C#
Můžete vytvořit vyhledávací vzor, který bude odpovídat prvkům ve stromu dokumentu na základě syntaxe selektorů CSS. Níže uvedený úryvek kódu vysvětluje, jak provádět stírání webu pomocí CSS Selector v C#:
// Připravte si HTML kód
var code = @"
<div class='happy'>
<div>
<span>Hello</span>
</div>
</div>
<p class='happy'>
<span>World!</span>
</p>
";
// Inicializujte dokument na základě připraveného kódu
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
// Zde vytvoříme selektor CSS, který extrahuje všechny prvky, jejichž atribut 'class' se rovná 'happy' a jejich podřízené prvky SPAN
var elements = document.QuerySelectorAll(".happy span");
// Iterujte výsledný seznam prvků
foreach (Aspose.Html.HTMLElement element in elements)
{
System.Console.WriteLine(element.InnerHTML);
// výstup: Dobrý den
// výstup: Svět!
}
}
Získejte bezplatnou licenci
Můžete požádat o bezplatnou dočasnou licenci k vyhodnocení plné kapacity API.
Závěr
V tomto článku jste se dozvěděli o knihovně webového škrabání v jazyce C#, Aspose.HTML for .NET, která obsahuje několik metod pro vytvoření webové škrabky v C#. Pojednává o HTML navigaci, XPath Query a také o metodách výběru CSS pro dosažení vašich požadavků. Pokud však potřebujete prodiskutovat jakékoli své obavy nebo otázky, napište nám na fórum.