xml语法笔记

python爬虫 xpath语法笔记

XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

使用方式:

使用//获取整个页面中的元素,然后写标签名,然后再写词进行提取
如:

1
//div[@class="abc"]

注意点:

1./和//的区别,/代表只获取直接子节点。//获取子孙节点。一般//用的比较多。当然也要视情况而定
2.contains:当某个属性包含多个值时,那么可以使用’contains’函数如:

1
//div[contains(@class,'job_detail')]

3.谓词中的下标是从1开始的

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点
@ 选取属性。

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

实例

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式 结果
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=’eng’] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

使用lxml解析HTML代码:

1.解析html字符串:使用’lxml.etree.HTML’进行解析。示例代码如下:

1
2
3
htmlabc =etree.HTML(text)
with open("htmlabc.html",'w',encoding='utf-8') as fp:
fp.write(etree.tostring(htmlabcencoding='utf-8').decode('utf-8'))

2.解析html文件:用’lxml.etree.parse’进行解析。代码如下:

1
2
htmlabc =etree.parse("htmlabc.html")
print(etree.tostring(htmlabcencoding='utf-8').decode('utf-8'))

这个函数默认使用’XML’解析器,所以如果碰到一些不规范的’HTML’代码时
就会解析错误,这时候就要自己创建’HTML’解析器

1
2
3
parser = etree.HTMLParser(encoding="utf-8")
htmlabc = etree.parse('htmlabc.html',parser=parser)
print(etree.tostring(htmlabc,encoding='utf-8').decode('utf-8'))