只需几分钟,就能用 C# 制作 Web Scraper!

Suciu Dan,2022 年 10 月 12 日

自古以来,人们就知道收集信息的重要性,而那些利用信息为自己谋利的人也因此兴旺发达。

如今,我们可以通过使用搜索工具更方便快捷地做到这一点,而创建自己的搜索工具也并非难事。您可以更快地收集线索,同时关注竞争对手和自己的品牌,并在投资创意之前了解更多信息。

说到这里,你可能已经知道了。

如果你有兴趣了解更多有关网络搜索的信息,或者想知道如何用 C# 制作工具,那就跟我一起去吧!

网络搜索合法吗?

只要你想搜刮的网站同意,这种做法就是合法的。您可以通过在 URL 地址中添加"/robots.txt"(如http://httpbin.org/robots.txt)并阅读权限,或查看其 TOS 部分来确认。

什么是使用 c sharp 进行网络搜索?

网络搜索是一种自动化技术,各种规模的公司都会使用它来提取数据,用于各种目的,如价格优化或收集电子邮件。研究人员利用网络搜索收集数据报告和统计数据,开发人员则获取大量数据用于机器学习。 

它是如何工作的?对于大多数网络搜刮工具来说,你所需要做的就是指定你希望提取数据的网站 URL。根据搜刮工具的能力,它会以结构化的方式提取网页信息,供你以任何方式进行解析和操作。 

需要注意的是,有些刮擦工具只查看页面的 HTML 内容,无法查看动态网页的信息。在这种情况下,需要使用更复杂的网络搜刮工具来完成工作。

使用网络搜刮工具非常有用,因为它可以减少你通常花在这项任务上的时间。手动复制和粘贴数据听起来并不是一件有趣的事情。想想看,要获得大量数据来训练人工智能需要花费多少时间!如果您有兴趣进一步了解数据提取的作用,请看一看!  

让我们看看如何在短短几分钟内创建我们的网络搜刮工具。

用 C# 创建自己的网络搜索器

在本教程中,我将向您展示如何用 C# 编写网络刮刀。我知道使用不同的编程语言(如Python)会对这项任务更有利,但这并不意味着用 C# 无法完成这项任务。 

使用 C# 编码有其优势,例如

  • 它是面向对象的;
  • 具有更好的完整性和互操作性;
  • 它是一个跨平台;

1.选择要搜索的页面

首先,您需要确定要搜索的网页。在本例中,我将搜索维基百科上的希腊,看看其目录中包含哪些主题。这是一个简单的例子,但你也可以将其扩展到其他网页。

2.检查网站代码

使用开发工具,你可以检查每个元素,查看你需要的信息在哪个标签下。只需右击网页并选择 "检查",就会弹出一个 "浏览器检查框"。

博客图片

您可以直接在元素部分或使用网页上的检查工具搜索类,如下图所示。

博客图片

因此,您发现所需的数据位于类为toctext 的 span 标记中。接下来要做的就是提取整个页面的 HTML,对其进行解析,然后只选择该特定类中的数据。让我们先做一些简单的准备工作!

3.准备工作空间

您可以使用任何适合自己的集成开发环境。在本例中,我将使用Visual Studio Code。您还需要安装.NET SDK

现在,您需要创建项目。为此,您显然需要打开 Visual Studio Code。然后,进入扩展菜单,安装 C# for Visual Studio Code。

博客图片

你需要一个地方来编写和运行我们的代码。在菜单栏中,选择 "文件">"打开文件"(macOS 上为 "文件">"打开..."),然后在对话框中创建一个文件夹,作为我们的工作区。

创建工作场所后,在项目终端输入以下命令即可创建一个简单的 "Hello World "应用程序模板:

dotnet 新控制台

新项目应该是这样的

博客图片

接下来,您需要安装这两个软件包:

  • HtmlAgilityPack是一个用 C# 编写的 HTML 解析器,用于读/写 DOM。
  • CsvHelper是一个用于读写 CSV 文件的软件包。

您可以在项目终端使用这些命令行安装它们:

dotnet add package csvhelper
dotnet add package htmlagilitypack

4.编写代码

让我们导入几分钟前安装的软件包,以及其他一些有用的软件包,以便以后使用:

using CsvHelper;
using HtmlAgilityPack;
using System.IO;
using System.Collections.Generic;
using System.Globalization;

Main 函数之外,您将为目录标题创建一个公共类。

public class Row
{
public string Title {get; set;}
}

现在,回到主功能,你需要加载你想要搜索的页面。正如我之前提到的,我们将查看维基百科中关于希腊的内容!

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://en.wikipedia.org/wiki/Greece");

我们的下一步是解析并选择包含所需信息的节点,这些信息位于toctext 类的 span 标记中。

varHeaderNames = doc.DocumentNode.SelectNodes("//span[@class='toctext']");

现在该如何处理这些信息呢?让我们把它存储到 .csv 文件中,以备后用。要做到这一点,首先需要遍历我们之前提取的每个节点,并将其文本存储到一个列表中。

CsvHelper 将完成剩余的工作,创建并将提取的信息写入文件。

var titles = new List<Row>();
foreach (var item in HeaderNames)
{
titles.Add(new Row { Title = item.InnerText});
}

using (var writer = new StreamWriter("your_path_here/example.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(titles);
}

5.运行代码

代码已经完成,现在只需运行即可!在终端中使用此命令行。请确保先保存了文件!

dotnet run

你完了

希望这篇文章能帮助你更好地理解使用 C# 进行网络搜索的基础知识。

拥有一个自己的搜刮工具非常有用,但请记住,你一次只能搜刮一个网页,而且还必须手动选择网站 HTML 代码中的标记。

如果你想抓取其他几个页面,使用抓取器会比手动选择信息快很多,没错,但并不是所有网站都能用这种方法抓取。有些网站是动态的,本示例无法提取其所有数据。

您是否想过使用一种预制的、更先进的工具来帮助您进行大规模刮削? 

看看 API 能为你做些什么?以下是WebScrapingAPI 编写的指南,可帮助您选择适合您需要的 API。

下次再见

新闻和更新

订阅我们的时事通讯,了解最新的网络搜索指南和新闻。

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

相关文章

缩图
使用案例XPath 与 CSS 选择器

XPath 选择器比 CSS 选择器更适合网络搜索吗?了解每种方法的优势和局限,为您的项目做出正确的选择!

米哈伊-马克西姆
作者头像
米哈伊-马克西姆
8 分钟阅读
缩图
指南了解如何使用 Golang 抓取 HTML 表格

学习如何使用 Golang 搜刮 HTML 表格以进行强大的数据提取。探索 HTML 表格的结构,并使用 Golang 的简洁性、并发性和强大的标准库构建网络刮擦工具。

安德烈-奥吉奥兰
作者头像
安德烈-奥吉奥兰
8 分钟阅读
缩图
指南避免网络抓取时被阻止或禁止 IP 的 11 大技巧

在不被封号的情况下掌握网络搜索!遵循有关尊重 TOS、使用代理和避免 IP 禁止的提示。道德、合法地提取数据。

Ștefan Răcila
作者头像
Ștefan Răcila
4 分钟阅读