使用 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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ICP配准两个obj三维物体+关键点处形成立体小球球 +TRF算法(含有在ICP配准情境下的算法对应代码)

import os import shutil import numpy as np import cv2 import face_alignment import vtk from scipy.spatial import cKDTree from scipy.optimize import least_squaresdef load_obj(file_path):vertices = []faces = []with open

如何学习Hadoop:糙快猛的大数据之路(利用GPT 学习)

目录 引言Hadoop是什么?学习Hadoop的"糙快猛"之道1. 不要追求完美,先动手再说2. 从简单的MapReduce开始3. 利用大模型加速学习4. 循序渐进,建立知识体系 构建您的Hadoop技能树1. 夯实基础:Linux和Java2. 深入理解HDFS3.…

2024算力基础设施安全架构设计与思考(免费下载)

算网安全体系是将数据中心集群、算力枢纽、一体化大数据中心三个层级的安全需求进行工程化解耦,从国家安全角度统筹设计,通过安全 服务化方式,依托威胁情报和指挥协同通道将三层四级安全体系串联贯通,达成一体化大数据安全目标。 …

Ubuntu 24.04 LTS 桌面安装MT4或MT5 (MetaTrader)教程

运行脚本即可在 Ubuntu 24.04 LTS Noble Linux 上轻松安装 MetaTrader 5 或 4 应用程序,使用 WineHQ 进行外汇交易。 MetaTrader 4 (MT4) 或 MetaTrader 5 是用于交易外汇对和商品的流行平台。它支持各种外汇经纪商、内置价格分析工具以及通过专家顾问 (EA) 进行自…

html2canvas + jspdf 纯前端HTML导出PDF的实现与问题

前言 这几天接到一个需求,富文本编辑器的内容不仅要展示出来,还要实现展示的内容导出pdf文件。一开始导出pdf的功能是由后端来做的,然后发现对于宽度太大的图片,导出的pdf文件里部分图片内容被遮盖了,但在前端是正常显…

【Git】(基础篇四)—— GitHub使用

GitHub使用 经过上一篇的文章,相信大家已经对git的基本操作熟悉了,但哪些使用git的方法只是在本地仓库进行,本文介绍如何使用git和远程仓库进行连接使用。 Github和Gitee 主要用到的两个远程仓库在线平台是github和gitee GitHub GitHub …

【ARMv8/v9 GIC- 700 系列 2 -- GIC-700 上电控制寄存器 GICR_PWRR】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 GIC-700 上电GICR_PWRR 寄存器字段介绍GICR_PWRR 功能说明GICR_PWER 代码配置GICR_PWRR 使用场景GICR_PWRR 注意事项GIC-700 上电 GICR_PWRR(功耗寄存器)是ARM GICv4架构中用于控制GIC-700是否可以关闭电源的寄存器。它通过几个位…

用DrissionPage过某里滑块分析

最近我又在找工作了,悲哀啊~,面试官给了一道题,要求如下: 爬虫机试:https://detail.1688.com/offer/643272204627.html 过该链接的滑动验证码,拿到正确的商品信息页html,提取出商品维度的信息&a…

7月18日学习打卡,数据结构堆

hello大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不…

SpringMVC的底层工作原理?

1.用户发送请求至前端控制器DispatcherServlet. 2.DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器 3.HandlerMapping找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给DispatcherSe…

B2BUA介绍

B2BUA介绍 B2BUA(Back-to-Back User Agent,背靠背用户代理)是通讯网络中,使用SIP(Session Initiation Protocol,会话发起协议)实现会话的一种逻辑实体。B2BUA作为SIP呼叫两端的用户代理&#xf…

Spring MVC-什么是Spring MVC?

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 文章目录 1.MVC定义2. Spring MVC 官方对于Spring Web MVC的描述这样的: Spring Web MVC is the original web framework built on the Servlet APl and has been includedin the Spring Frame…

科技论文在线--适合练习期刊写作和快速发表科技成果论文投稿网站

中国科技论文在线这个平台可以作为练手的一个渠道,至少可以锻炼一下中文写作,或者写一些科研方向的简单综述性文章。当然,如果你的老师期末要求也是交一份科技论文在线的刊载证明的话,这篇文章可以给你提供一些经验。 中国科技论…

PyCharm软件初始化配置

安装完pycharm后,需要对其进行个性化设置,分别设置方法如下 目录 一、修改主题二、修改默认字体和大小三、设置拖动滚轮改变字体大小四、常见快捷键 一、修改主题 1、界面右上角点击红框的内容 2、选择Theme选项 3、选择对应的主题 第一二个是白色主题…

Java中的JDK、JRE、JVM

JDK(Java Development kit):Java开发工具包 JVM(Java Virtual Machine):Java虚拟机,真正运行Java程序的地方 核心类库:Java已经写好的东西,可以直接用 开发工具&#xff…

RK3568平台(环境篇)windon与ubuntu之间文件互传

一.windon与ubuntu共享文件夹 打开设置: 点击选项,共享文件夹 共享文件夹,就是在电脑的固定盘符下面,找一个文件夹为Windows和Linux都能看得见的共用的看得见的文件夹,点击添加文件夹。 点击确定后在ubuntu添加共享文…

【Linux】Linux环境设置环境变量操作步骤

Linux环境设置环境变量操作步骤 在一些开发过程中本地调试经常需要依赖环境变量的参数,但是怎么设置对小白来说有点困难,今天就介绍下具体的操作步骤,跟着实战去学习,更好的检验自己的技术水平,做技术还是那句话&…

Java 网络编程(TCP编程 和 UDP编程)

1. Java 网络编程(TCP编程 和 UDP编程) 文章目录 1. Java 网络编程(TCP编程 和 UDP编程)2. 网络编程的概念3. IP 地址3.1 IP地址相关的:域名与DNS 4. 端口号(port)5. 通信协议5.1 通信协议相关的…

memcached 高性能内存对象缓存

memcached 高性能内存对象缓存 memcache是一款开源的高性能分布式内存对象缓存系统,常用于做大型动态web服务器的中间件缓存。 mamcached做web服务的中间缓存示意图 当web服务器接收到请求需要处理动态页面元素时,通常要去数据库调用数据,但…

Adobe国际认证详解-影视后期

在当今的数字媒体时代,影视后期制作作为创意产业的核心环节,对于专业技能的要求日益提高。Adobe国际认证,作为全球创意设计领域的重要标杆,为影视后期制作人员提供了一个展示自我、提升技能的国际舞台。 何为影视后期?…