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 ...
随机推荐
- 使用 pv 命令监控 linux 命令的执行进度
如果你是一个 linux 系统管理员,那么毫无疑问你必须花费大量的工作时间在命令行上:安装和卸载软件,监视系统状态,复制.移动.删除文件,查错,等等.很多时候都是你输入一个命令,然后等待很长时间直到执 ...
- mysql 5.7.10 启动多实例笔记
1. 复制配置文件 cp /etc/my.cnf /etc/my3308.cnf 2. 修改配置文件 3. 创建目录, 并赋予权限 4. 初始化数据库 ---> 有报错 2018-01-03T0 ...
- [转]Android开源框架ImageLoader的完美例子
Android开源框架ImageLoader的完美例子 2013年8月19日开源框架之Universal_Image_Loader学习 很多人都在讨论如何让图片能在异步加载更加流畅,可以显示大量图片, ...
- postman-记录cookies信息
接口:赞我的列表,get请求,要登陆用户信息 http://v80.pcauto.com.cn/xsp/s/auto/info/nocache/club/getPraiseMyDynas.xsp?pa ...
- MySQL存储过程、触发器 小例子
一.存储过程 语法: CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...]) BEGIN ... END 参数: IN 输入参数 表示该参数的值必须在调用存 ...
- Ubuntu -- 安装、卸载程序的命令
通过sudo apt-get install xxxx 安装软件后,总是无法卸载干净,这里以Apache 为例,提供方法:首先sudo apt-get remove apache2再sudo apt- ...
- Linux及Windows系统配置JDK环境变量
1.Linux系统配置方法 记住,要下载JDK-8u121-linux-x64.tar.gz,而不是JRE-8u121-linux-x64.tar.gz,JDK中含很多开发者实用工具,比如javac. ...
- keystone源码分析(一)——Paste Deploy的应用
本keystone源码分析系列基于Juno版Keystone,于2014年10月16日随Juno版OpenStack发布. Keystone作为OpenStack中的身份管理与授权模块,主要实现系统用 ...
- ORA-00918: column ambiguously defined
今天遇到了一个Oracle的SQL问题:ORA-00918: column ambiguously defined 大致的意思就是字段名称不明确,可能存在同名的字段 SELECT * FROM (SE ...
- phd文献阅读日志-博一上学期
为了记住并提醒自己阅读文献,进行了记录(这些论文都是我看过理解的),论文一直在更新中. 博一上学期: 1.week 6,2017.10.16 2014-Automatic Semantic Model ...