数据解析之XPath & lxml库

XPath

  • 定义

即XML路径语言(XML Path Language),是一种用来肯定XML文档中某部分位置的语言,它基于XML的树状结构,提供在数据结构树中寻找节点的能力,也适用于HTML文档中;html

  • 开发工具

    • Chrome 在Chrome的应用商店搜索XPath Helper,而后安装这个插件便可; imagenode

    • Firefox 一样的方式,在应用中心查找XPath Checker,而后安装这个插件便可,因为未使用Firefox,便再也不演示;python

  • 语法

    • 节点选取

| 表达式 | 描述 | 示例 | |--|--|--| | nodename|选词当前节点下节点的全部子节点 | div | | / | 若在最前,则表示从根节点开始选取,不然选择某节点下的某个节点 | /div | | // | 从全局节点中选取某一节点所在全部位置 | //div | | @ | 选取某一节点属性 | //div[@color] |shell

  • 谓语
路径表达式 描述
/markstore/mark[1] 选取markstore下第一个元素
/markstore/mark[last()] 选取markstore下倒数第二个mark元素
markstore/mark[position()<5] 选取markstore下前四个子元素
//mark[@id] 选取拥有id的mark元素
//mark[@id=‘k’] 选取id属性为k的mark元素
  • 通配符
通配符 描述
* 匹配任意节点
@* 匹配节点中的任意属性

注意事项

  • 使用方式://获取当前页面全部元素,而后写标签名,最后写谓词进行提取;
  • /和//的区别:/表明只获取直接子节点,//表明获取子孙节点;

lxml库

安装

使用以下命令安装便可,数据结构

pip install lxml

使用

from lxml import etree

text = '''
<div>
    <ul>
        <li class="id-1"><a href="www.baidu.com">baidu</a></li>
        <li class="id-2"><a href="www.google.com">Google</a></li>
    </ul>
</div>
'''
# 解析字符串为html文档
html = etree.HTML(text)
# 字符串序列化为html文档
result = etree.tostring(html, encoding='utf-8')
print(result.decode('utf-8'))

# 从文件读取
parser = etree.HTMLParser(encoding='utf-8')
html = etree.parse('csdn.html', parser=parser)

# 获取全部a标签的href属性
aList = html.xpath('//a/@href')
for a in aList:
    print(a)

总结

本文主要介绍了爬虫中数据解析时所须要的用的XPath和lxml库,介绍了它们的安装方式和简单的使用方式,若是你有更好的建议和想法,欢迎留言指正。工具

相关文章
相关标签/搜索