xpath语法与lxml库

1.什么是XPath

  • 一种在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历

2.节点

  • 节点类型

    在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。其中,XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

    比如说:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <bookstore>  #文档节点
    <book>
        <title lang="en">Harry Potter</title>   #lang="en"属性节点
        <author>J K. Rowling</author>   #元素节点
        <year>2005</year>
        <price>29.99</price>
    </book>
    </bookstore>
    
  • 基本值(原子值)

    基本只是无父或无子的节点

    JJ K. Rowling
    "en"
    
  • 节点关系

    ①父:每个元素及属性都有一个父

    ②子:元素节点可有零个、一个、多个子

    ③同胞:拥有相同的父的节点

    ④先辈:某节点的父、父的父

    ⑤后代:某个节点的子、子的子,等等

3.语法

  • 选取节点

    表达式 描述
    nodename(节点名) 选取此节点的所有子节点
    / 从根节点选取
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
    . 选取当前节点,比如说 ‘.//a‘ 就是获取某一个节点下的a标签,而不是整个文档中的a标签
    .. 选取当前节点的父节点
    @ 选取属性
  • 谓语

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

    路径表达式 结果
    /bookstore/book[1] 选取 bookstore 子元素的第一个 book 元素
    /bookstore/book[last()] 选取 bookstore 子元素的最后一个 book 元素
    /bookstore/book[last()-1] 选取 bookstore 子元素的倒数第二个 book 元素
    /bookstore/book[position()<2] 选取第一个 bookstore 的子元素 book 元素
    //title[@lang] 选取有 lang 属性的 title 元素
    //title[@lang=‘eng‘] 选取有值为 eng 的 lang 属性的 title 元素
    /bookstore/book[price>35.00]//title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00
  • 选取未知节点

    通配符 描述 例子
    * 匹配任何元素节点 /bookstore/*,选取bookstore的所有子元素
    @* 匹配任何属性节点 //title[@*],选取所有带有属性的title元素

3.运算符

4.lxml库

  • lxml是一个HTML/XML的解析器,主要功能是解析+提取HTML/XML数据

5.基本使用

  • 解析html字符串:

    from lxml import etree #使用lxml的etree
    
    url = ‘www.baidu.com‘
    
    resp = requests.get(url) #获取HTML网页信息
    text = resp.text #获取一个 unicode 型的文本数据(字符串)
    html = etree.HTML(text) #利用etree.HTML,将字符串解析为HTML文档
    

    注:在使用lxml来解析HTML代码的时候,如果HTML代码不规范,它会自动补全。

    注:上述定义的html并不是一个字符串,而是一个对象

  • 解析html文件:

    在使用 ‘lxml.etree.parse‘ 进行解析时,这个函数默认使用的是 ‘XML‘ 解析器,所以遇到不规范的html代码时会解析错误,这时候要自己指定 ‘HTML‘ 解析器。

    parser = etree.HTMLParser(encoding=‘utf-8‘)
    html = etree.parse(‘文件.html‘,parser=parser)
    print(etree.tostring(html, encoding=‘utf-8‘).decode(‘utf-8‘)) #将Element对象转换成字符串输出
    
  • 与xpath结合

    ①获取一个html对象中所有的tr标签

    trs = html.xpath(‘//tr‘) # ‘.xpath‘ 返回的是一个list
    for tr in trs:
        print(etree.tostring(tr, encoding=‘utf-8‘).decode(‘utf-8‘)) #将Element转换成str输出
    

    ②获取第二个tr标签

    tr = html.xpath(‘//tr‘)[0] #因为 ‘.xpath‘ 返回的是列表,所以获取第一个元素需要加[0]
    

    ③获取所有class等于even的tr标签

    trs = html.xpath(‘//tr[@class=‘even‘]‘)
    for tr in trs:
        print(etree.tostring(tr, encoding=‘utf-8‘).decode(‘utf-8‘))
    

    ④获取所有a标签的href属性的值

    datas = html.xpath(‘//a/@href‘)
    for data in datas:
        print(data) #该例href的值已经是一个str类型,所以不用再使用 ‘.tostring‘ 方法
    

    ⑤获取文本信息

    data = tr.xpath(‘./td[3]/text()‘)[0] #xpath返回的永远是list,不要忘记加[0]
    

    注:如果文本信息不是直接在td标签下的话,就要 ‘//text()‘

原文地址:https://www.cnblogs.com/Vinson-Cheung/p/12639162.html

时间: 2024-08-25 13:15:58

xpath语法与lxml库的相关文章

Python爬虫利器三之Xpath语法与lxml库的用法

前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 BeautifulSoup 使用不太习惯的话,可以尝试下 Xpath. 参考文档: lxml python 官方文档 XPath语法参考 w3school 安装 pip install lxml 利用 pip 安装即可 XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在

Xpath语法与lxml库的用法

BeautifulSoup 已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法. 1.安装 pip install lxml 2. XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上. 选取节点: XPath 使用路径表达式在 X

网页解析库-Xpath语法

网页解析库 简介 除了正则表达式外,还有其他方便快捷的页面解析工具 如:lxml (xpath语法) bs4 pyquery等 Xpath 全称XML Path Language, 即XML路径语言,是一门在XML文档中查找信息的语言,同样也适用于HTML文档的搜索. 爬虫 我们需要抓取的只是某个网站或者应用的一部分内容 结构化 先有结构 再有数据 转化为字典处理(如:json => dict) 非结构化 html 正则 lxml bs4等去解析 安装: pip install beautifu

[XPath/Python] XPath 与 lxml (二)XPath 语法

XPath 选取节点时使用的表达式是一种路径表达式.节点是通过路径(path)或者步(steps)来选取的. 本章使用以下 XML 文档作为示例. <?xml version="1.0" encoding="utf8"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</pr

常见的爬虫分析库(2)-xpath语法

xpath简介 1.xpath使用路径表达式在xml和html中进行导航 2.xpath包含标准函数库 3.xpath是一个w3c的标准 xpath节点关系 1.父节点 2.子节点 3.同胞节点 4.先辈节点 5.后代节点 xpath语法 表达式 s说明 article  选取所有article元素的子节点 /article  选取根元素article article/a 选取所有属于article的子元素a的元素 //div  选取所有div子元素(不论出现在文档任何地方) /article/

爬虫-Xpath语言和lxml类库

什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要我们自行定义. XML 被设计为具有自我描述性. XML 是 W3C 的推荐标准 W3School官方文档:http://www.w3school.com.cn/xml/index.asp XML 和 HTML 的区别: 数据格式 描述 设计目标 XML Extensible Markup Lang

爬虫 (3)- lxml库和贴吧图片下载案例

lxml库 lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据. lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息. lxml python 官方文档:http://lxml.de/index.html 需要安装C语言库,可使用 pip 安装:pip install lxml (或通过wheel方式安装) 百度贴吧下载图片案例 源码下载

lxml库

lxml库 lxml是一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML数据. 基本使用: 1.我们可以利用他来解析HTML代码,并且在解析HTML代码的时候,如果HTML代码不规范,他会自动的进行补全. #使用lxml的etree库 from lxml import etree text = """ <div id="usrbar" alog-group="userbar" alog-alias=&quo

Python Xpath语法

一.python数据提取xpath1.beautifulsoup xpath 正则表达式2.xpath是一种在XML和HTML文档中查找信息的语言,可用来在XML和HTML中对元素进行遍历  Chrome XPath Helper3.XPath语法(1)选取节点:使用路径表达式来选取文档中的节点     nodename  选取节点的所有子节点  //div     / 如果是在最前面,代表从根节点选取,否则选择某节点下的某个节点 一个/代表直接子节点(一个网页的直接子节点是HTML) 两个//