在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#的优势,特别是其在网络爬取过程中逐步调试代码的能力。

安装

您的第一步将是安装IronWebScraper,您可以从 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。我们会在这个类中添加一些方法,包括初始化方法,在这里我们可以设置初始设置并启动第一个请求,这将引发一连串的反应,最终抓取整个网站。

我们还必须至少添加一个Parse方法。Parse方法读取从互联网下载的网页,并使用类似于jQuery的CSS选择器选择内容,提取相关的文本和/或图片以供使用。

Parse方法中,我们还可以指定希望抓取器继续跟随的超链接以及将被忽略的超链接。

我们可以使用抓取方法提取任何数据,并将其导出为便于后续使用的JSON格式文件。

向前迈进

要了解有关 Iron Web Scraper 的更多信息,我们建议您阅读 应用程序接口参考文档然后开始查看文档中教程部分的示例。

我们建议您查看的下一个示例是 C# "博客 "网络抓取示例在本章中,我们将学习如何从 WordPress 博客等博客中提取文本内容。这在网站迁移中可能非常有用。

在此基础上,您可以继续查看其他 高级网络抓取教程 在这些示例中,我们可以了解一些概念,如具有多种不同类型页面的网站、电子商务网站,以及在从互联网上搜刮数据时如何使用多个代理、身份和登录。