在 C# 中的網路爬蟲

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

IronWebScraper 是什麼?

IronWebScraper 是一個針對 C# 和 .NET 編程平台的類庫與框架,允許開發者以程式化的方式讀取網站並提取其內容。 這非常適合對現有網站或內部網進行逆向工程,並將它們轉換回數據庫或JSON數據。 它也適用於從網際網路下載大量文件。

在許多方面,Iron Web Scraper 與 Python 的 Scrapy 庫相似,但它利用了 C#的優勢,特別是在網絡抓取過程中進行代碼逐步執行和調試的能力。

安裝

您的第一步將是安裝 Iron Web Scraper,您可以從NuGet或由下載DLL從我們的網站上。

您將需要的所有類別都可以在 Iron Web Scraper 命名空間中找到。

PM > Install-Package IronWebScraper

熱門使用案例

將網站遷移到數據庫

IronWebScraper 提供工具和方法,讓您能夠將您的網站重新編寫回結構化數據庫。 此技術在將內容從過時的網站和內部網遷移到您的新 C# 應用程式時非常有用。

遷移網站

能夠在C#中輕鬆提取部分或完整網站的內容,可減少遷移或升級網站和內部網路資源的時間和成本。 這比直接的 SQL 轉換要高效得多,因為它將數據壓平到每個網頁上可見的內容,並且不需要了解以前的 SQL 數據結構,也不需要構建複雜的 SQL 查詢。

建立搜尋索引

Iron Web Scraper 可以指向您自己的網站或內部網路以讀取結構化數據,讀取每個頁面並提取正確的數據,以便準確填充組織內的搜索引擎。

IronWebScraper 是抓取搜索索引內容的理想工具。 IronSearch這類搜索應用程序可以從IronWebScraper讀取結構化內容,以構建強大的企業搜索系統。

使用 Iron Webscraper

要學習如何使用Iron Web Scraper,最好查看一些範例。 這個基本示例創建了一個類別,用於從網站博客抓取標題。

using IronWebScraper;

namespace WebScrapingProject
{
    class MainClass
    {
        public static void Main(string [] args)
        {
            var scraper = new BlogScraper();
            scraper.Start();
        }
    }

    class BlogScraper : WebScraper
    {
        public override void Init()
        {
            this.LoggingLevel = WebScraper.LogLevel.All;
            this.Request("https://ironpdf.com/blog/", Parse);
        }

        public override void Parse(Response response)
        {
            foreach (var title_link in response.Css("h2.entry-title a"))
            {
                string strTitle = title_link.TextContentClean;
                Scrape(new ScrapedData() { { "Title", strTitle } });
            }

            if (response.CssExists("div.prev-post > a [href]"))
            {
                var next_page = response.Css("div.prev-post > a [href]")[0].Attributes ["href"];
                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
    {
        public override void Init()
        {
            this.LoggingLevel = WebScraper.LogLevel.All;
            this.Request("https://ironpdf.com/blog/", Parse);
        }

        public override void Parse(Response response)
        {
            foreach (var title_link in response.Css("h2.entry-title a"))
            {
                string strTitle = title_link.TextContentClean;
                Scrape(new ScrapedData() { { "Title", strTitle } });
            }

            if (response.CssExists("div.prev-post > a [href]"))
            {
                var next_page = response.Css("div.prev-post > a [href]")[0].Attributes ["href"];
                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

		Public Overrides Sub Init()
			Me.LoggingLevel = WebScraper.LogLevel.All
			Me.Request("https://ironpdf.com/blog/", AddressOf Parse)
		End Sub

		Public Overrides Sub Parse(ByVal response As Response)
			For Each title_link In response.Css("h2.entry-title a")
				Dim strTitle As String = title_link.TextContentClean
				Scrape(New ScrapedData() From {
					{ "Title", strTitle }
				})
			Next title_link

			If response.CssExists("div.prev-post > a [href]") Then
				Dim next_page = response.Css("div.prev-post > a [href]")(0).Attributes ("href")
				Me.Request(next_page, AddressOf Parse)
			End If
		End Sub
	End Class
End Namespace
VB   C#

要抓取特定網站,我們將必須創建自己的類別來讀取該網站。此類別將擴展 Web Scraper。 我們將在這個類別中添加一些方法,包括 init,在此方法中我們可以設定初始設定並開始第一個請求,這將會引發連鎖反應,從而抓取整個網站。

我们还必须至少添加一个Parse方法。 解析方法讀取從互聯網下載的網頁,並使用類似於 jQuery 的 CSS 選擇器來選擇內容並提取相關的文本和/或圖像以供使用。

Parse 方法中,我們還可以指定哪些超連結需要爬蟲繼續跟隨,以及哪些將被忽略。

我們可以使用 scrape 方法來提取任何數據,並將其轉儲到方便的 JSON 格式文件中,以便日後使用。

向前邁進

要了解更多有關Iron Web Scraper的資訊,我們推薦您閱讀API參考文件,然後開始查看我們文件中教程部分的示例。

下一個推薦您查看的範例是C# "博客" 網頁刮取範例,我們將學習如何從博客中提取文字內容,例如WordPress博客。 這在網站遷移中可能非常有用。

從那裡,您可能會繼續查看其他高級網頁抓取教程例如,我們可以觀察一些概念,例如具有多種類型頁面的網站、電子商務網站,以及在從互聯網抓取數據時如何使用多個代理、身份和登錄。