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 ...
随机推荐
- Ogre2.0 全新功能打造新3D引擎
不知当初是在那看到,说是Ogre2.0浪费了一个版本号,当时也没多想,以为没多大更新,一直到现在想做一个编辑器时,忽然想到要看下最新版本的更新,不看不知道,一看吓一跳,所以说,网络上的话少信,你不认识 ...
- C++ 面向对象 类成员函数this指针
每个类成员函数都只涉及一个对象, 即调用它的对象. 但有时候方法可能涉及到两个对象, 在这种情况下需要使用C++ 的 this 指针 假设将方法命名为topval(), 则函数调用stock1.top ...
- 第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装
第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装 elasticsearch(搜索引擎)介绍 ElasticSearch是一个基于 ...
- Java如何监视线程的状态?
在Java编程中,如何监视线程的状态? 以下示例演示如何通过扩展Thread类并使用currentThread.getName()方法来监视线程的状态. package com.yiibai; cla ...
- e837. 设置JTabbedPane中卡片的颜色
// Create a tabbed pane JTabbedPane pane = new JTabbedPane(); // Set the text color for all tabs pan ...
- webpy 使用python3开发
由于做服务器时总是需要调式与客户端的各种协议,由于种种原因客户端总是滞后的.所以一直想做个协议调试工具.postman是一个好东西,不过如果前后协议之间有关联,就不是很好用了. 之前用python写过 ...
- goldengate一些參数整理
manager參数: AUTOSTART:指定在mgr启动时自己主动启动那些进程. AUTOSTART ER * AUTOSTART extract extsz AUTORESTART:指定在mgr ...
- C# 让枚举返回字符串
下面的手段是使用给枚举项打标签的方式,来返回字符串 分别定义一个属性类,一个枚举帮助类 /// <summary> /// 自定义属性 /// </summary> [Attr ...
- Making ARC and non-ARC files play nice together
From Codeography If you want to exclude a file from being compiled with ARC you can do so by setting ...
- 5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践
5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践 进入编辑模式 小写i在当前字符前插入 大写I 在光标所在行的行首插入 大写O 在光标上面一行插入编辑 小写o在光标下面一行插入编辑 小 ...