Webscraping w języku C
Czym jest IronWebScraper?
IronWebScraper to biblioteka klas i framework dla języka C# oraz platformy programistycznej .NET, która umożliwia programistom programowe odczytywanie stron internetowych i wyodrębnianie ich zawartości. Rozwiązanie to jest idealne do inżynierii odwrotnej witryn internetowych lub istniejących intranetów oraz przekształcania ich z powrotem w bazy danych lub dane w formacie JSON. Biblioteka jest również przydatna do pobierania dużych ilości dokumentów z Internetu.
Pod wieloma względami IronWebScraper przypomina bibliotekę Scrapy dla języka Python, lecz wykorzystuje zalety języka C#, w szczególności możliwość przechodzenia przez kod krok po kroku w trakcie procesu scrapingu oraz debugowania.
Instalacja
Pierwszym krokiem jest zainstalowanie IronWebScraper — można to zrobić z poziomu NuGet lub poprzez pobranie pliku DLL z naszej strony internetowej.
Wszystkie potrzebne klasy znajdują się w przestrzeni nazw IronWebScraper.
Install-Package IronWebScraper
Popularne przypadki użycia
Migracja witryn internetowych do baz danych
IronWebScraper dostarcza narzędzia i metody umożliwiające inżynierię odwrotną witryn internetowych i przekształcanie ich z powrotem w ustrukturyzowane bazy danych. Technologia ta jest przydatna podczas migracji treści z przestarzałych witryn i intranetów do nowej aplikacji C#.
Migracja witryn internetowych
Możliwość łatwego wyodrębniania zawartości częściowej lub całkowitej witryny internetowej w języku C# skraca czas i obniża koszty migracji lub modernizacji zasobów serwisowych i intranetowych. Może to być znacznie wydajniejsze niż bezpośrednie transformacje SQL, ponieważ sprowadza dane do tego, co jest widoczne na każdej stronie internetowej, nie wymaga rozumienia poprzednich struktur danych SQL ani tworzenia złożonych zapytań SQL.
Wypełnianie indeksów wyszukiwania
IronWebScraper można skierować na własną witrynę internetową lub intranet w celu odczytu ustrukturyzowanych danych, przejrzenia każdej strony i wyodrębnienia odpowiednich informacji, tak aby wyszukiwarka wewnątrz organizacji mogła zostać dokładnie zasilona.
IronWebScraper jest idealnym narzędziem do pozyskiwania treści na potrzeby indeksu wyszukiwania. Aplikacja wyszukiwania, taka jak IronSearch, może odczytywać ustrukturyzowane treści z IronWebScraper w celu zbudowania wydajnego systemu wyszukiwania klasy enterprise.
Korzystanie z IronWebScraper
Aby dowiedzieć się, jak używać IronWebScraper, najlepiej zapoznać się z przykładami. Poniższy podstawowy przykład tworzy klasę służącą do zbierania tytułów z bloga witryny internetowej.
using IronWebScraper;
namespace WebScrapingProject
{
class MainClass
{
public static void Main(string [] args)
{
var scraper = new BlogScraper();
scraper.Start();
}
}
class BlogScraper : WebScraper
{
// Initialize scraper settings and make the first request
public override void Init()
{
// Set logging level to show all log messages
this.LoggingLevel = WebScraper.LogLevel.All;
// Request the initial page to start scraping
this.Request("https://ironpdf.com/blog/", Parse);
}
// Method to handle parsing of the page response
public override void Parse(Response response)
{
// Loop through each blog post title link found by CSS selector
foreach (var title_link in response.Css("h2.entry-title a"))
{
// Clean and extract the title text
string strTitle = title_link.TextContentClean;
// Store the extracted title for later use
Scrape(new ScrapedData() { { "Title", strTitle } });
}
// Check if there is a link to the previous post page and if exists, follow it
if (response.CssExists("div.prev-post > a[href]"))
{
// Get the URL for the next page
var next_page = response.Css("div.prev-post > a[href]")[0].Attributes["href"];
// Request the next page to continue scraping
this.Request(next_page, Parse);
}
}
}
}
using IronWebScraper;
namespace WebScrapingProject
{
class MainClass
{
public static void Main(string [] args)
{
var scraper = new BlogScraper();
scraper.Start();
}
}
class BlogScraper : WebScraper
{
// Initialize scraper settings and make the first request
public override void Init()
{
// Set logging level to show all log messages
this.LoggingLevel = WebScraper.LogLevel.All;
// Request the initial page to start scraping
this.Request("https://ironpdf.com/blog/", Parse);
}
// Method to handle parsing of the page response
public override void Parse(Response response)
{
// Loop through each blog post title link found by CSS selector
foreach (var title_link in response.Css("h2.entry-title a"))
{
// Clean and extract the title text
string strTitle = title_link.TextContentClean;
// Store the extracted title for later use
Scrape(new ScrapedData() { { "Title", strTitle } });
}
// Check if there is a link to the previous post page and if exists, follow it
if (response.CssExists("div.prev-post > a[href]"))
{
// Get the URL for the next page
var next_page = response.Css("div.prev-post > a[href]")[0].Attributes["href"];
// Request the next page to continue scraping
this.Request(next_page, Parse);
}
}
}
}
Imports IronWebScraper
Namespace WebScrapingProject
Friend Class MainClass
Public Shared Sub Main(ByVal args() As String)
Dim scraper = New BlogScraper()
scraper.Start()
End Sub
End Class
Friend Class BlogScraper
Inherits WebScraper
' Initialize scraper settings and make the first request
Public Overrides Sub Init()
' Set logging level to show all log messages
Me.LoggingLevel = WebScraper.LogLevel.All
' Request the initial page to start scraping
Me.Request("https://ironpdf.com/blog/", AddressOf Parse)
End Sub
' Method to handle parsing of the page response
Public Overrides Sub Parse(ByVal response As Response)
' Loop through each blog post title link found by CSS selector
For Each title_link In response.Css("h2.entry-title a")
' Clean and extract the title text
Dim strTitle As String = title_link.TextContentClean
' Store the extracted title for later use
Scrape(New ScrapedData() From {
{ "Title", strTitle }
})
Next title_link
' Check if there is a link to the previous post page and if exists, follow it
If response.CssExists("div.prev-post > a[href]") Then
' Get the URL for the next page
Dim next_page = response.Css("div.prev-post > a[href]")(0).Attributes("href")
' Request the next page to continue scraping
Me.Request(next_page, AddressOf Parse)
End If
End Sub
End Class
End Namespace
Aby zbierać dane z konkretnej witryny, należy stworzyć własną klasę do jej odczytu. Klasa ta będzie rozszerzać klasę WebScraper. Należy dodać do niej kilka metod, w tym Init, gdzie można ustawić ustawienia początkowe i zainicjować pierwsze żądanie — co z kolei wywoła reakcję łańcuchową prowadzącą do zebrania danych z całej witryny.
Należy również dodać co najmniej jedną metodę Parse. Metody Parse odczytują strony internetowe pobrane z Internetu i używają selektorów CSS wzorowanych na jQuery do wyboru treści oraz wyodrębniania odpowiednich tekstów i/lub obrazów.
W metodzie Parse można również określić, które hiperłącza przeglądarka ma kontynuować śledzenie, a które ignorować.
Metodę Scrape można wykorzystać do wyodrębnienia dowolnych danych i zapisania ich w wygodnym formacie pliku zbliżonym do JSON na potrzeby późniejszego użycia.
Dalsze kroki
Aby dowiedzieć się więcej o IronWebScraper, zaleca się zapoznanie się z dokumentacją referencyjną API, a następnie przejrzenie przykładów w sekcji samouczków dokumentacji.
Następnym zalecanym przykładem jest przykład scrapingu bloga w C#, w którym opisano, jak wyodrębnić treść tekstową z bloga, na przykład bloga WordPress. Może to być bardzo przydatne podczas migracji witryny.
Na kolejnym etapie można zapoznać się z innymi zaawansowanymi samouczkami dotyczącymi scrapingu, w których omówiono takie zagadnienia jak witryny z wieloma różnymi typami stron, serwisy e-commerce, a także korzystanie z wielu serwerów proxy, tożsamości i loginów podczas zbierania danych z Internetu.

