使用 XPath 定位 HTML 中的 img 标签

00020.png

引言

随着互联网内容的日益丰富,网页数据的自动化处理变得愈发重要。图片作为网页中的重要组成部分,其获取和处理在许多应用场景中都显得至关重要。例如,在社交媒体分析、内容聚合平台、数据抓取工具等领域,图片的自动下载和处理是必不可少的。本文将详细介绍如何在 C# 应用程序中使用 XPath 定位 HTML 中的 img 标签,并实现图片的下载。

技术背景

XPath(XML Path Language)是一种用于在 XML 文档中进行选择节点的查询语言,同样也适用于 HTML 文档。它提供了一种简洁的方式来定位和操作文档中的元素。在 C# 中,我们可以使用 HtmlAgilityPack 库结合 XPath 来实现对 HTML 文档的解析和数据提取。

环境准备

在开始编写代码之前,你需要准备以下环境和工具:

  1. Visual Studio:一个强大的 C# 开发环境。
  2. .NET Framework:确保你的项目是基于 .NET Framework。
  3. HtmlAgilityPack:一个用于解析 HTML 文档的库。可以通过 NuGet 包管理器安装。

实现步骤

1. 安装 HtmlAgilityPack

首先,通过 NuGet 包管理器安装 HtmlAgilityPack。在 Visual Studio 中,打开你的项目,然后通过“工具” > “NuGet 包管理器” > “管理解决方案的 NuGet 包”,搜索并安装 HtmlAgilityPack

2. 创建 HttpWebRequest

为了从网页中获取 HTML 文档,我们需要创建一个 HttpWebRequest 对象。这将允许我们发送 HTTP 请求并接收响应。

csharp
using System;
using System.IO;
using System.Net;
using HtmlAgilityPack;

namespace HtmlImageExtractor
{
    class Program
    {
        static void Main(string[] args)
        {
            string targetUrl = "http://example.com";
            string proxy_host = "ip.16yun.cn";
            int proxy_port = 31111;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetUrl);
            request.Proxy = new WebProxy(proxy_host, proxy_port);
            request.Proxy.Credentials = CredentialCache.DefaultCredentials;

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();

            HtmlDocument doc = new HtmlDocument();
            doc.Load(responseStream);

            string firstImageUrl = doc.DocumentNode.SelectSingleNode("//img[@src]").Attributes["src"].Value;
            DownloadImage(firstImageUrl, "image1.jpg");

            response.Close();
        }

        private static void DownloadImage(string url, string localFileName)
        {
            using (WebClient webClient = new WebClient())
            {
                webClient.DownloadFile(url, localFileName);
            }
        }
    }
}
3. 使用 HtmlAgilityPack 解析 HTML

在上述代码中,我们首先创建了一个 HttpWebRequest 对象,并设置了代理服务器。然后,我们使用 HtmlAgilityPack 库来解析 HTML 文档。

csharp
HtmlDocument doc = new HtmlDocument();
doc.Load(responseStream);
4. 使用 XPath 定位 img 标签

一旦 HTML 文档被加载到 HtmlDocument 对象中,我们可以使用 XPath 来定位 img 标签。

csharp
string firstImageUrl = doc.DocumentNode.SelectSingleNode("//img[@src]").Attributes["src"].Value;

这里,//img[@src] 是一个 XPath 表达式,它选择所有具有 src 属性的 img 元素。SelectSingleNode 方法返回第一个匹配的节点。

5. 下载图片

最后,我们定义了一个 DownloadImage 方法,该方法使用 WebClient 类的 DownloadFile 方法将图片下载到本地。

csharp
private static void DownloadImage(string url, string localFileName)
{
    using (WebClient webClient = new WebClient())
    {
        webClient.DownloadFile(url, localFileName);
    }
}

代码解析

在上述代码中,我们展示了如何使用 C# 和 HtmlAgilityPack 库结合 XPath 来实现图片的下载。以下是关键步骤的详细解析:

  1. 创建 HttpWebRequest:通过 WebRequest.Create 方法创建一个 HTTP 请求对象。
  2. 设置代理:通过 WebProxy 设置代理服务器,以便绕过某些网络限制。
  3. 获取响应流:通过 GetResponse 方法获取响应,并从响应中获取流。
  4. 解析 HTML:使用 HtmlAgilityPackHtmlDocument 类加载 HTML 流。
  5. 使用 XPath:通过 XPath 表达式定位 img 标签,并获取其 src 属性。
  6. 下载图片:使用 WebClientDownloadFile 方法下载图片到本地。

应用场景

  1. 网页爬虫:自动从网页中下载图片,用于内容聚合或数据分析。
  2. 内容管理系统:下载并存储网页中的图片,用于内容展示。
  3. 数据抓取工具:从网页中提取图片,用于图像识别或机器学习。

结语

通过本文的介绍和代码示例,我们可以看到如何在 C# 中使用 XPath 定位 HTML 中的 img 标签,并实现图片的下载。这种方法不仅高效,而且易于实现,适用于各种需要从网页中提取图片资源的场景。希望本文能够为你的项目提供帮助,并激发你在数据处理和自动化方面的创新思维。
有对文章的代理有需求的可以关注这里:https://v.16yun.cn/accounts/phone_register/?sale_user=ZM_seven7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/843217.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux源码安装的Redis如何配置systemd管理并设置开机启动

文章目录 实验前提实验 实验前提 已完成源码安装并能正常启动redis /usr/local/bin/redis-server能正常启动redis 实验 vim /etc/systemd/system/redis.service内容如下: [unit] Descriptionredis-server Afternetwork.target[Service] Typeforking ExecStart/…

k8s集群 安装配置 Prometheus+grafana

k8s集群 安装配置 Prometheusgrafana k8s环境如下:机器规划: node-exporter组件安装和配置安装node-exporter通过node-exporter采集数据显示192.168.40.180主机cpu的使用情况显示192.168.40.180主机负载使用情况 Prometheus server安装和配置创建sa账号&…

[论文笔记] CT数据配比方法论——1、Motivation

我正在写这方面的论文,感兴趣的可以和我一起讨论!!!!!! Motivation 1、探测原有模型的配比: 配比 与 ppl, loss, bpw, benchmark等指标 之间的关系。 2、效果稳定的配比:配比 与 模型效果 之间的规律。 Experiments 1、主语言(什么语言作为主语言,几种主语言?…

Linux----Mplayer音视频库的移植

想要播放视频音乐就得移植相关库到板子上 Mplayer移植需要依赖以下源文件:(从官网获取或者网上) 1、zlib-1.2.3.tar.gz :通用的内存空间的压缩库。 2、libpng-1.2.57.tar.gz :png格式图片的压缩或解压库 3、Jpegsrc.v9b.tar.gz : jpeg格式图片的压…

docker应用:搭建云手机

简介:近来慵懒,身体懈怠良多,思来想去随手看点小攻略以宽慰不懈怠的心。云手机Cloudphone,就是将云计算技术运用于网络终端服务,通过云服务器实现云服务的手机。其实就是深度结合了网络服务的智能手机,这类…

初谈Linux信号-=-信号的产生

文章目录 概述从生活角度理解信号Linux中信号信号常见的处理方式理解信号的发送与保存 信号的产生core、term区别 概述 从生活角度理解信号 你在网上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时, 你该…

【IntelliJ IDEA】一篇文章集合所有IDEA的所有设置

IntelliJ IDEA 是一款功能强大的集成开发环境(IDE),其设置涵盖了多个方面,以满足不同开发者的需求和偏好。由于 IDEA 的设置相当复杂和详尽,这里无法在一篇简短的文章中详细介绍所有设置。然而,我可以提供一…

义务外贸wordpress独立站主题

健身器材wordpress网站模板 跑步机、椭圆机、划船机、动感单车、健身车、深蹲架、龙门架、健身器材wordpress网站模板。 https://www.jianzhanpress.com/?p4251 农业机械wordpress网站模板 植保机械、畜牧养殖机械、农机配件、土壤耕整机械、农业机械wordpress网站模板。 …

戴着苹果Vision Pro,如何吃花生米

6月底苹果Vision Pro国内开售,我早早到官网预订了一台。选择必要的配件,输入视力信息,定制符合自己视力的蔡司镜片。确实贵。把主要配件和镜片配齐,要3万6,比Pico、META的眼镜贵一个数量级。 Vision Pro出来后&#x…

复合翼无人机搭载自组网模块集群组网技术实现详解

复合翼无人机作为一种具备高效飞行和长航时特点的飞行器,在多个领域如军事侦察、环境监测、灾害救援等都有着广泛的应用。而为了实现复合翼无人机之间的高效通信,搭载自组网模块实现集群组网技术显得尤为重要。本文将详细介绍复合翼无人机搭载自组网模块…

Java实现随机题库-全站最呆瓜思想,保证你能学会

目录 Blue留言 : 学本篇文章之前所需掌握技能 推荐视频: 代码逻辑思想 步骤: 1、引入依赖 2、做一个excel表格 3、java实现从excel表中取数据 第一步:根据excel上面的字段名(如下图)&#xff0…

Boost搜索引擎项目相关介绍

Boost搜索引擎相关介绍: 首先,Boost库不具备搜索条件,所以我们这个项目借此实现搜索功能。 项目的核心就是以用户搜索的相关内容在目标数据中进行查找。 首先,我们面临的第一大难题就是目标数据,在这里目标数据就是Boo…

如何学习Spark:糙快猛的大数据之旅

作为一名大数据开发者,我深知学习Spark的重要性。今天,我想和大家分享一下我的Spark学习心得,希望能够帮助到正在学习或准备学习Spark的朋友们。 目录 Spark是什么?学习Spark的"糙快猛"之道1. 不要追求完美,在实践中学习2. 利用大模型作为24小时助教3. 根据自己的节…

51单片机学习(4)

一、串口通信 1.串口通信介绍 写完串口函数时进行模块化编程,模块化编程之后要对其进行注释,以便之后使用模块化函数,对模块化.c文件中的每一个函数进行注释。 注意:一个函数不能既在主函数又在中断函数中 模式1最常用&#xf…

《Towards Black-Box Membership Inference Attack for Diffusion Models》论文笔记

《Towards Black-Box Membership Inference Attack for Diffusion Models》 Abstract 识别艺术品是否用于训练扩散模型的挑战,重点是人工智能生成的艺术品中的成员推断攻击——copyright protection不需要访问内部模型组件的新型黑盒攻击方法展示了在评估 DALL-E …

二、GD32F407VET6使用定时器点灯

零、所需文件及环境: 1、第一章建立好的LED灯闪烁程序 2、编译环境MDK5(KEIL5) 3、一个GD32F407VET6硬件 4、一个下载器j-link 或 st-link等 5.代码编辑器 Notepad (可以不要 用记事本也能编译 都是习惯的问题 壹、复制LED灯闪烁程序 1.1 复制le…

25w的理想L6简约民宿,15W的哪吒L拎包入住

文 | AUTO芯球 作者 | 谦行 25w买理想L6 ? 踩坑咯!你是没看哪吒L吧! 哪吒是杂牌?兄弟!买车要动脑子! 你先去哪吒店里体验一下!肠子都给你悔青! 上有老下有小,要精打…

MongoDB教程(十七):MongoDB主键类型ObjectId

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、Object…

Spring AOP(2)原理(代理模式和源码解析)

目录 一、代理模式 二、静态代理 三、动态代理 1、JDK动态代理 (1)JDK动态代理实现步骤 (2)定义JDK动态代理类 (3)代码简单讲解 2、CGLIB动态代理 (1)CGLIB 动态代理类实现…

Spring系列-04-事件机制,监听器,模块/条件装配

事件机制&监听器 SpringFramework中设计的观察者模式-掌握 SpringFramework 中, 体现观察者模式的特性就是事件驱动和监听器。监听器充当订阅者, 监听特定的事件;事件源充当被观察的主题, 用来发布事件;IOC 容器本身也是事件广播器, 可以理解成观察…