Webscraping w języku C

This article was translated from English: Does it need improvement?
Translated
View the article in English

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
$vbLabelText   $csharpLabel

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.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 133,274 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronWebScraper
uruchom przykład obserwuj, jak twoja docelowa strona przekształca się w dane strukturalne.