为了能够在XML (关于XML技术,可参照htp://ww.w3school.comn.cn/xmnl/进行完整学习)文档树中准确地找到某个节点,引入了XPath的概念。
1.XPath,是基于文档的层次结构来确定查找路径的
2.区分正则表达式和XPath:
(1)用正则表达式进行查找,则它会告诉你这个建筑本身有哪些特征,以及它的左边是什么,右边是什么。这样的描述限定查找的范围较大
(2)而XPath会直接告诉你这个建筑位于“中国-北京-昌平区-建材城西路-金燕龙办公楼- -层",相比较而言,这种描述更加具体,易于找到。
lxml库概述(就目前所学这个用到的多)
作用:解析和提取HTML或者XML格式的数据
优点:可以利用XPath语法快速地定位特定的元素或节点
1.从字符串或文件中解析XML
为了能够将XML文件解析为树结构,etree 模块中提供了如下3个函数:
( 1) fromstring() 函数:从字符串中解析XML文档或片段,返回根节点(或解析器目标返回的结果)。#通常用于将XML字面量直接写入到源代码中
(2) XM() 函数:从字符串常量中解析XML文档或片段,返回根节点(或解析器目标返回的结果)。#XML方法,与fromstring方法基本一样
(3) HTML() 函数:从字符串常量中解析HTML文档或片段,返回根节点(或解析器目标返回的结果)。#HTML()方法,如果没有和标签,会自动补上
附加:
(4)parse()函数:从XML文件中直接解析
#在调用函数时,如果没有提供解析器,则使用默认的解析器,函数会返回一个ElementTree类的对象html=etree.parse(’. /hello.html’)
#默认解析器经常解析错误,这时候就要自己创建HTML解析器myparser
myparser = etree.HTMLParser(encoding=‘utf-8’)
html=etree.parse(‘hello.html’,parser=myparser)
#以上代码中html是返回的ElementTree类对象。以后就可以调用html的一些方法进行操作
语法格式(详见xpath概述)
lxml库中大部分功能都位于lxml.etree 模块中,导入lxml.etree模块的常见方式
from lxml import etree
变量名=etree.方法名(参数)
变量名1=变量名.xpath(‘xpath路径’)
如果想要获得文本可以在路径表达式后加/text()
例:
from lxml import etree
root = etree.HTML(html) #这只是片段,html是获取到的网页源代码
user = root.xpath('//a[@class="resume_newlist_username"]/text()')#按照属性查找
可以与xpath游览器插件结合,方便找到需要爬取的部分
https://blog.csdn.net/lu1171901273/article/details/90443832
2.ElementPath 类简介
ElementTree类中附带了一一个类似于XPath路径语言的ElementPath类。在ElementTree类或Elements类的API文档中,提供了3个常用的方法,可以满足大部分搜索和查询需求,并且这3个方法的参数都是XPath语句。
(1) find()方法:返回匹配到的第一个子元素。
(2) findall()方法:以列表的形式返回所有匹配的子元素。
(3) iterfind() 方法:返回一个所有匹配元素的迭代器。
lxml库的- -些相关类如下:
(1) Element类:可以理解为XML的节点。
(2) ElementTree类:可以理解为一个完整的XML文档树。
( 3) ElementPath类:可以理解为XPath,用于搜索和定位节点。