在爬虫时可以使用xpath做相应的信息抽取
xpath常用规则
表达式 | 描述 |
---|---|
nodename | 选取此接待你的所有子节点 |
/ | 从当前节点选取直接子节点 |
// | 从当前节点选取子孙节点 |
. | 选取当前节点 |
… | 选取当前子节点的父节点 |
@ | 选取属性 |
安装
cmd-》pip3 install lxml
实例
##第一种方式,直接再python代码中解析html字符串
#导入lxml,下面两句话相当于from lxml import etree
#只不过在python之后的lxml模块中不再能直接应仍有etree模块
from lxml import html
etree = html.etree
text='''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单验证01</title>
</head>
<body>
<ul>
<li><a href ="/a/b/c/java/" >java</a></li>
<li><a href ="/a/b/c/python/" >python</a></li>
<li><a href ="/a/b/c/ai/" >ai</a></li>
</ul>
</body>
</html>
'''
#使用etree解析html中的字符串
html = etree.HTML(text)
# print(html)
#提取是数据
r= html.xpath('/html/body/ul/li/a')
# print(r)#[<Element a at 0x16f6748>, <Element a at 0x16f6828>, <Element a at 0x16f6968>]
# r= html.xpath('/html/body/ul/li/a/text()')
# print(r) #['java', 'python', 'ai']
r= html.xpath('/html/body/ul/li[1]/a/text()')
print(r) #['java']
'''
/ 当前元素的直接字节点
// 当前元素的子节点或者孙子节点
text() 获取文本
@attr 获取属性对应的值
获取第一个
li[1]
获取最后一个
li[last]
获取前两个
li[position()<3]
获取倒数第三个
li[last()-2]
'''