在C#中的网页抓取
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
要抓取特定网站,我们需要创建自己的类来读取该网站。这个类将扩展 Web Scraper。 我们将向这个类添加一些方法,包括init,在其中我们可以设置初始配置并启动第一个请求,这将依次引发连锁反应,从而抓取整个网站。
我们还必须至少添加一个Parse
方法。 解析方法读取从互联网下载的网页,并使用类似 jQuery 的 CSS 选择器来选择内容并提取相关的文本和/或图像以供使用。
在Parse
方法中,我们还可以指定希望爬虫继续跟踪的超链接,以及它将忽略的超链接。
我们可以使用抓取方法提取任何数据,并将其转储到方便的JSON风格文件格式中以供日后使用。
向前发展
要了解更多关于Iron Web Scraper的信息,我们建议您阅读应用程序接口参考文档,然后开始查看我们文档中教程部分的示例。
下一个我们建议您查看的例子是C# "博客 "网络抓取示例,在这里我们将学习如何从博客中提取文本内容,例如从WordPress博客中提取。 这在网站迁移中可能非常有用。
从那里,您可能会继续查看其他高级网络抓取教程在这些示例中,我们可以了解一些概念,如具有多种不同类型页面的网站、电子商务网站,以及在从互联网上搜刮数据时如何使用多个代理、身份和登录。