XPath的初步认识
嘿嘿,最近开始上班,不是过于太忙,而是自己一直在学习一些项目中用到的而我暂时还没接触的知识,WCF,log4等,感觉还没有总结的需要吧,虽然都了解啦,但是暂时还是初步的学习,基础的暂时是知道啦,还没有练习的太多吧,嘿嘿,由于以后就要常常使用XPath啦,所以就来做一个XPath的Demo练习下。
一.XPath的Demo
下面是在html页面上操作元素,使用XPath过滤想要的表格文本,然后以表格的形式保存在一个文本中,如下所示:
using System;
using System.Web;
using HtmlAgilityPack;
using System.IO;
using System.Xml; public class Handler : IHttpHandler { public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
int num = ;
string xpathtrNode = "//*[@id='ReportList']/thead/tr/th";
string xpathtdNode = "//*[@id='ReportList']/tbody/tr/td";
//获取html的路径
string path = context.Request.MapPath("HtmlPage.html");
//string html = File.ReadAllText(path);
//使用Nuget包下载并添加引用HtmlAgilityPack,调用其方法获取html
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.Load(path); //创建html的节点
HtmlNode rootNode = htmlDoc.DocumentNode;
//使用XPath获取需要查询的元素文本,返回一个HtmlNode类型的集合
HtmlNodeCollection tabList = rootNode.SelectNodes(xpathtrNode); HtmlNode tdNode = htmlDoc.DocumentNode;
HtmlNodeCollection tdList = tdNode.SelectNodes(xpathtdNode); //HtmlNode td13=htmlDoc.DocumentNode;
//HtmlNodeCollection td13List =td13.SelectNodes(xpLasttd);
foreach ( HtmlNode item in tabList)
{
num++;
string tableText = item.InnerText + " ";
if (num == )
{
tableText = tableText + "\n";
num = ;
}
//常见文件,把要输出的内容输出在Excel文件中
File.AppendAllText(@"F:\公司Xpath\tablepath.xls", tableText, System.Text.Encoding.Default);
}
foreach (HtmlNode td in tdList)
{
string tdText = td.InnerText;
tdText = tdText + " ";
num++;
if (num == )
{
tdText = tdText + "\n";
num = ;
}
File.AppendAllText(@"F:\公司Xpath\tablepath.xls", tdText, System.Text.Encoding.Default);
}
}
}
二.XPath的运算符
运算符/特殊字符 |
说明 |
/ |
此路径运算符出现在模式开头时,表示应从根节点选择。 |
// |
从当前节点开始递归下降,此路径运算符出现在模式开头时,表示应从根节点递归下降。 |
. |
当前上下文。 |
.. |
当前上下文节点父级。 |
* |
通配符;选择所有元素节点与元素名无关。(不包括文本,注释,指令等节点,如果也要包含这些节点请用node()函数) |
@ |
属性名的前缀。 |
@* |
选择所有属性,与名称无关。 |
: |
命名空间分隔符;将命名空间前缀与元素名或属性名分隔。 |
( ) |
括号运算符(优先级最高),强制运算优先级。 |
[ ] |
应用筛选模式(即谓词,包括"过滤表达式"和"轴(向前/向后)")。 |
[ ] |
下标运算符;用于在集合中编制索引。 |
| |
两个节点集合的联合,如://messages/message/to | //messages/message/cc |
- |
减法。 |
div, |
浮点除法。 |
and, or |
逻辑运算。 |
mod |
求余。 |
not() |
逻辑非 |
= |
等于 |
!= |
不等于 |
特殊比较运算符 |
< 或者 < <= 或者 <= > 或者 > >= 或者 >= 需要转义的时候必须使用转义的形式,如在XSLT中,而在XMLDOM的scripting中不需要转义。 |
轴名称 |
结果 |
ancestor |
选取当前节点的所有先辈(父、祖父等) |
ancestor-or-self |
选取当前节点的所有先辈(父、祖父等)以及当前节点本身 |
attribute |
选取当前节点的所有属性 |
child |
选取当前节点的所有子元素。 |
descendant |
选取当前节点的所有后代元素(子、孙等)。 |
descendant-or-self |
选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 |
following |
选取文档中当前节点的结束标签之后的所有节点。 |
namespace |
选取当前节点的所有命名空间节点 |
parent |
选取当前节点的父节点。 |
preceding |
直到所有这个节点的父辈节点,顺序选择每个父辈节点前的所有同级节点 |
preceding-sibling |
选取当前节点之前的所有同级节点。 |
self |
选取当前节点。 |
暂时的即先总结到这里啦,嘿嘿,对于XPath的一语法我只是初步的认识,但是熟练的掌握我还是要继续联系的,学习是要一直坚持的,友友们,加油加油!
XPath的初步认识的更多相关文章
- 第05组 Alpha冲刺 (1/6)
.th1 { font-family: 黑体; font-size: 25px; color: rgba(0, 0, 255, 1) } #ka { margin-top: 50px } .aaa11 ...
- XPath 初步讲解
2016-05-05 XPath是JavaScript 中节点查找手段,ie9以后的版本才支持w3c标准,其他浏览器基本支持.在e8之前的浏览器,通过基于 activeX的xml dom对象实现. 为 ...
- Python爬虫利器三之Xpath语法与lxml库的用法
前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 Beau ...
- 芝麻HTTP:Python爬虫利器之Xpath语法与lxml库的用法
安装 pip install lxml 利用 pip 安装即可 XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPat ...
- xpath详细讲解
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- 洗礼灵魂,修炼python(71)--爬虫篇—【转载】xpath/lxml模块,爬虫精髓讲解
Xpath,lxml模块用法 转载的原因和前面的一样,我写的没别人写的好,所以我也不浪费时间了,直接转载这位崔庆才大佬的 原帖链接:传送门 以下为转载内容: --------------------- ...
- 8.正则表达式和XPath
1.使用正则表达式爬取内涵段子 import requests import re def loadPage(page): url = "http://www.neihan8.com/art ...
- 【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜
实验网站:虾米音乐排行榜 网站地址:http://www.xiami.com/chart 难度系数:★☆☆☆☆ 依赖库:request.lxml的etree (安装lxml:pip install ...
- 在Scrapy项目【内外】使用scrapy shell命令抓取 某网站首页的初步情况
Windows 10家庭中文版,Python 3.6.3,Scrapy 1.5.0, 时隔一月,再次玩Scrapy项目,希望这次可以玩的更进一步. 本文展示使用在 Scrapy项目内.项目外scrap ...
随机推荐
- (笔记)Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
参考了前人的成果,结合自己实践,arm-linux-gcc-4.4.3.tar.gz的下载地址为:http://ishare.iask.sina.com.cn/f/13836544.html?from ...
- struts2系列(三):struts2配置详解
原文链接:http://www.cnblogs.com/fmricky/archive/2010/05/20/1740479.html 1.<include> 利用include标签,可以 ...
- SecureCRT连接linux,vim颜色显示问题
为什么使用VIM?由于具有颜色显示的功能.而且还支持很多程序语法.VIM能够帮助你直接进行程序除错.可是在SecureCRT连接Linux后显示就是黑白,感觉非常不爽! ! 怎么办? vim编敲代码也 ...
- c# 连接mysql配置config,不用装net connector
<system.data> <DbProviderFactories> <remove invariant="MySql.Data.MySqlClient&qu ...
- gradle 的安装
前言: 我不是一个勤奋好学的人,奔着新技术就跑去尝试学习.但是在工作或者学习的过程中,遇到了的技术,还是得一个坎一个坎的迈过去.把今天遇到的坎变成明天的垫脚石. 想学习一下 spring 的源码,然后 ...
- MAC算法
MAC算法 (Message Authentication Codes) 带秘密密钥的Hash函数:消息的散列值由只有通信双方知道的秘密密钥K来控制.此时Hash值称作MAC. 原理:在md与sha系 ...
- linux命令中的head命令
head命令和tail命令就像他的名字一样浅显易懂,它是用来显示开头或者结尾某个数量的文字区块,head用来显示档案的开头至标准输出当中,而tail想当然就是查看档案的结尾. 命令格式 head [ ...
- c++ int string互转
1. ){ monthNumber = "; itoa(i+,iCharArray,); monthNumber += iCharArray; } else { itoa(i+,iCharA ...
- SharePoint 使用ECMAscript对象模型来读取帖子列表
本随笔讲述如何用JavaScript来读取SharePoint 2013 中blog相关的帖子列表. ASCX File Content: <div id="divGetItemsFr ...
- 【PCA】
http://blog.csdn.net/xiaojidan2011/article/details/11595869 非常清楚 核心部分解释:主成份用于降纬,通过线型变换,从高纬度映射到低纬度,其中 ...