在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 Webscraper,您可以从 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方法中,我们还可以指定希望爬虫继续跟踪的超链接,以及它将忽略的超链接。

我们可以使用抓取方法提取任何数据,并将其转储到方便的JSON风格文件格式中以供日后使用。

向前发展

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

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

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