知识点
- 了解lxml模块和xpath语法的关系
- 了解lxml模块的使用场景
- 了解lxml模块的安装
- 了解 谷歌浏览器xpath helper插件的安装和使用
- 掌握xpath语法-基础节点选择语法
- 掌握xpath语法-节点修饰语法
- 掌握xpath语法-其他常用语法
- 掌握lxml模块中使用xpath语法定位元素提取属性值或文本内容
- 掌握lxml模块中stree.tostring函数的使用
1. 了解lxml模块和xpath语法
对html或xml形式的文本提取特定内容,需要lxml模块的xpath语法
- lxml模块可以利用XPath规则语法,来快速定位HTML,XML文档中特定元素以及获取节点信息(文本内容、属性值)
- XPath(XML Path Language)是一门在HTML、XML文档中查找信息的语言,可用来在HTML、XML文档中对元素和属性进行遍历
- 提取xml、html中的数据需要lxml模块和xpath语法配合使用
2. xpath语法-基础节点选择语法
表达式 | 描述 |
---|---|
/ | 从根节点选取、或者是元素和元素之间的过渡 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
text() | 选取文本 |
3. xpath语法-节点修饰语法
- 通过索引修饰节点
/html/body/div[3]/div/div[1]/div
/html/body/div[3]/div/div[1]/div[3]
/html/body/div[3]/div/div[1]/div[last()] 选中最后一个
/html/body/div[3]/div/div[1]/div[last()-1] 选中倒数第二个
/html/body/div[3]/div/div[1]/div[position()>=10] 范围选择 - 通过属性值修饰节点
//div[@id=“content-left”]/div/@id 出现在[]中的@是使用标签属性名和属性值修饰节点,出现在结尾的/@是取属性值 - 通过子节点的值修饰节点
//span[i>2000]
//div[span[2]>=9.4]
- 通过包含修饰
//div[contains(@id,"")
//span[contains(text(),“无限”)]
4.lxml使用
from lxml import etree
text = '''
<div>
<ul>
<li class="item-l"><a href="link1.html">first item</a></li>
<li class="item-l"><a href="link2.html">second item</a></li>
<li class="item-inaction"><a href="link3.html">third item</a></li>
<li class="item-l"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</ul>
</div>
'''
html = etree.HTML(text)
print(html.xpath('//a/text()'))
print(html.xpath('//a[@href="link1.html"]/text()')[0])
print(html.xpath('//a/@href'))
text_list = html.xpath('//a/text()')
href_list = html.xpath('//a/@href')
#for text in text_list:
# #print(text, text_list.index(text))
# myindex = text_list.index(text)
# link = href_list[myindex]
# print(link)
#for text,link in zip(text_list,href_list):
# print(text,link)
el_list = html.xpath('//a')
for el in el_list:
print(el.xpath('./@href'))
print(el.xpath('./text()'),el.xpath('./@href'))
print(el.xpath('.//text()'),el.xpath('.//@href'))