如何使用C#和HTMLAgilityPack抓取网页

简介: HTMLAgilityPack是一款备受欢迎的用于解析和操作HTML文档的库。在使用之前,开发者需要考虑一些优缺点。下面是一些值得注意的优点:1. 强大的错误容忍性 2. 灵活的API 3. 广泛的应用场景然而,也有一些缺点需要考虑:1. 性能问题 2. 对最新HTML特性的支持限制 3. 可能存在依赖和冲突

1130274.png

HTMLAgilityPack是一款备受欢迎的用于解析和操作HTML文档的库。在使用之前,开发者需要考虑一些优缺点。下面是一些值得注意的优点:

  1. 强大的错误容忍性:HTMLAgilityPack可以处理其他解析器可能拒绝或无法解析的格式错误或无效的HTML文档。
  2. 灵活的API:它提供了一个灵活而强大的API,使开发者能够使用XPath、LINQ或CSS选择器来查询和修改HTML节点,满足不同的需求。
  3. 广泛的应用场景:HTMLAgilityPack支持.NET Framework和.NET Core,可用于各种场景,包括网页抓取、数据提取和HTML清理等。

然而,也有一些缺点需要考虑:

  1. 性能问题:处理大型或复杂的HTML文档时,特别是在使用XPath查询时,HTMLAgilityPack可能会遇到一些性能问题。
  2. 对最新HTML特性的支持限制:HTMLAgilityPack可能不支持一些最新的HTML特性或标准,例如HTML5或SVG。
  3. 可能存在依赖和冲突:在使用HTMLAgilityPack时,可能会引入一些依赖或与其他使用HTMLAgilityPack的库或框架发生冲突的情况。

下面以采集https://www.booking.com网站的酒店及评价为示例:

usingSystem;
usingSystem.IO;
usingSystem.Net;
usingSystem.Net.Http;
usingHtmlAgilityPack;
classProgram{
staticasyncTaskMain(string[] args)
    {
// 亿牛云(动态转发隧道代理)//爬虫代理加强版 代理服务器的认证信息stringproxyUrl="www.16yun.cn";
stringproxyPort="3100";
stringproxyUsername="16YUN";
stringproxyPassword="16IP";
// 目标网站的URLstringurl="https://www.booking.com";
// 创建HttpClientHandler以设置代理认证HttpClientHandlerhandler=newHttpClientHandler        {
Proxy=newWebProxy(proxyUrl,proxyPort),
UseProxy=true,
PreAuthenticate=true,
UseDefaultCredentials=false,
Credentials=newNetworkCredential(proxyUsername, proxyPassword)
        };
// 创建HttpClient,并设置代理HttpClientclient=newHttpClient(handler);
// 发送HTTP GET请求并获取网页内容HttpResponseMessageresponse=awaitclient.GetAsync(url);
response.EnsureSuccessStatusCode();
stringhtml=awaitresponse.Content.ReadAsStringAsync();
// 使用HTMLAgilityPack解析HTML文档HtmlDocumentdocument=newHtmlDocument();
document.LoadHtml(html);
// 从HTML中提取酒店名字和评价信息varhotelNames=document.DocumentNode.SelectNodes("//h3[contains(@class, 'sr-hotel__name')]");
varhotelRatings=document.DocumentNode.SelectNodes("//div[contains(@class, 'bui-review-score__badge')]");
// 创建CSV文件using (StreamWriterwriter=newStreamWriter("hotels.csv"))
        {
writer.WriteLine("Hotel Name, Rating");
// 将数据写入CSV文件for (inti=0; i<hotelNames.Count; i++)
            {
stringname=hotelNames[i].InnerText.Trim();
stringrating=hotelRatings[i].InnerText.Trim();
writer.WriteLine($"{name}, {rating}");
            }
        }
Console.WriteLine("数据已成功抓取并保存为CSV文件。");
    }
}

上述程序运行后,将抓取https://www.booking.com网站上的酒店名字和评价,并将其保存为名为"hotels.csv"的CSV文件。在CSV文件中,每一行包含酒店名字和对应的评价。

相关文章
|
3月前
|
数据采集 存储 C#
C# 爬虫技术:京东视频内容抓取的实战案例分析
C# 爬虫技术:京东视频内容抓取的实战案例分析
|
3月前
|
Linux C#
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
|
6月前
|
数据采集 前端开发 数据挖掘
Fizzler库+C#:从微博抓取热点的最简单方法
本文介绍如何使用Fizzler库和C#构建微博热点信息爬虫。通过Fizzler的CSS选择器定位关键信息,提取热点标题和排名,实现微博内容的智能挖掘。示例代码展示单线程和多线程采集方法,并涉及代理IP使用。
Fizzler库+C#:从微博抓取热点的最简单方法
|
6月前
|
数据采集 API C#
网页解析高手:C#和HtmlAgilityPack教你下载视频
使用C#和HtmlAgilityPack解析小红书网页,下载其视频内容。文章涵盖了解析网页、获取视频链接、C#实现、HtmlAgilityPack简化解析、代理IP确保下载稳定及多线程提高下载效率。提供的代码示例展示了如何设置代理和多线程下载视频。实验结果显示,该方法能有效、高效地下载小红书视频。
123 5
网页解析高手:C#和HtmlAgilityPack教你下载视频
|
6月前
|
XML 移动开发 前端开发
C#HtmlAgilityPack类库再回顾
C#HtmlAgilityPack类库再回顾
55 0
|
6月前
|
XML 存储 开发框架
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
214 0
|
6月前
|
网络安全 C#
C# HttpWebRequest 获取 HTTPS 网页内容
C# HttpWebRequest 获取 HTTPS 网页内容
597 0
|
6月前
|
数据采集 存储 C#
抓取Instagram数据:Fizzler库带您进入C#程序的世界
在当今数字化的世界中,数据是无价之宝。社交媒体平台如Instagram成为了用户分享照片、视频和故事的热门场所。作为开发人员,我们可以利用爬虫技术来抓取这些平台上的数据,进行分析、挖掘和应用。本文将介绍如何使用C#编写一个简单的Instagram爬虫程序,使用Fizzler库来解析HTML页面,同时利用代理IP技术提高采集效率。
抓取Instagram数据:Fizzler库带您进入C#程序的世界
|
6月前
|
API C# 数据安全/隐私保护
C# 实现网页内容保存为图片并生成压缩包
C# 实现网页内容保存为图片并生成压缩包
|
11月前
|
数据采集 开发框架 前端开发
使用C#和HtmlAgilityPack打造强大的Snapchat视频爬虫
Snapchat作为一款备受欢迎的社交媒体应用,允许用户分享照片和视频。然而,由于其特有的内容自动消失特性,爬虫开发面临一些挑战。本文将详细介绍如何巧妙运用C#和HtmlAgilityPack库,构建一个高效的Snapchat视频爬虫。该爬虫能够从Snapchat网页版中提取视频链接,并将其下载保存到本地。为了提升爬虫的效率和可靠性,我们将使用代理IP技术和多线程技术,以规避Snapchat的反爬机制。