LXML安装:pip install lxml
——xPath使用-----------------------------------------------------------------------------------
获取文本:
//标签1[@属性1="属性值1"]/标签2[@属性2="属性值2"]/.../text()
获取属性值
//标签1[@属性1="属性值1"]/标签2[@属性2="属性值2"]/.../@属性n
eg:-------------------------------------------------------------------
from lxml import html
def parse():
"""将html文件中内容 使用xpath进行提取"""
#读取文件中的内容
f =open('./static/index.html', 'r', encoding='utf-8')
s = f.read()
selector = html.fromstring(s)
# 解析a 标签内容
a = selector.xpath('//div[@id="container"]/a/text()')
print(a[0])
# 解析href属性
alink = selector.xpath('//div[@id="container"]/a/@href')
print(alink[0])
f.close()
if __name__=='__main__':
parse()
xpath只能够处理标准的xml文件,即每个开始标签必须对应一个结束标签的情况。
而htmlparser只需要处理标签即可
。wml不支持script。所以在写xslt时候,已经做了处理。
但是用JTidy将html转xml时候,发现jtidy也有失误的时候。。。就是对复杂的script不很很好的按照原来的结构转成xml。被迫我只好在使用jtidy时候,先过滤script。先后使用DOM,JDOM都不是很理想。原因html的容错性。。。xml比较严格。所以DOM,JDOM无法很好的解析html。最后看到HtmlParse
HOT SUMMER每天都是不一样,积极的去感受生活
C#Xpath解析HtmlDocument的使用方法与递归取得页面所有标签xpath值(附源码)
在学习HTML Xpath之前呢我们先来下载一下Dll文件
下载地址:http://htmlagilitypack.codeplex.com/
大家下载单击如下图片下载就行了
<ignore_js_op>
接下来就是在程序中引用一下,
<ignore_js_op>
然后就可以直接调用 了,大家看看
代码吧
普通浏览复制代码
//htmlDcoument对象用来访问Html文档s
HtmlAgilityPack.HtmlDocument hd = new HtmlAgilityPack.HtmlDocument()
//加载Html文档
hd.LoadHtml(strhtml)
string str = hd.DocumentNode.SelectSingleNode("//*[@id='e_font']").OuterHtml
这样就可以得到一个标签的HTml代码了
OuterHtml是取包含本身的Html如果是InnerHtml就是取的包含在这个标签之内的所有Html代码了
这点大家要注意了
如果大家想获取Html代码的Xpath路径就是这部分
//*[@id='e_font']
复制代码
这个其实很简单只在大家安装一个Firbug就行了,
看下图片
<ignore_js_op>
大家只要进入选择模式,然后选择你要的内容,然后右键复制一下就行了。
然后放在SelectSingleNode()方法里就OK了
下面我说说几个方法和属性的意思吧、
方法
SelectNodes 获取的是一个集合
SelectSingleNode 获取一个标签
SetAttributeValue 设置标签的属性值例如:SetAttributeValue("name","xpath-89")这说明把name属性的值修改为xpath-89
属性
OuterHtml 是取包含本身的Html
InnerHtml 取的包含在这个标签之内的所有Html代码了
XPath 获取相对应的Xpath值
Attributes 获取一个属性的值例如:Attributes("name")
也可以进行添加属性例如:
普通浏览复制代码
hd.DocumentNode.SelectSingleNode(item.Key).Attributes.Add("xpathid", "xpath_1" )
下面我写了一个递归获取Html页面所有Xpath值的方法大家看一下吧
普通浏览复制代码
//key(Xpath),value(整个节点)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)