python第三方库lxml(xpath)

lxml

lxml库¶
1,lxml库是一个HTML/XML的解析器,主要功能是如何解析和提取HTML/XML数据

2,lxml和正则一样,都是通过C语言实现的,它是一款高性能的Python HTML/XML的解析器,我们可以利用之前所学习的XPath语法,来快速定位特定元素以及节点信息

3,lxml python 的官方文档:http://lxml.de/index.html

4,需要安装语言库,pip install lxml

使用流程:

  • 导入模块:from lxml import etree
  • 创建解析对象:parse_html = etree.HTML(html)
  • 解析对象调用xpath:r_list = parse_html.xpath('xpath语法')

xpath语法

XPath中,HXML文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

表达式 描述
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
/ 如果是在最前面,表示从根节点选取。否则某节点下的某个节点
@ 选取某个节点的属性
text() 选取文本。

谓语:谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中。

表达式 描述
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。

XPath实例测试

1. 获取所有的
  • 标签
  • # 例子
    html = '''
    
    '''
    
    from lxml import etree
    
    xml_doc = etree.HTML(html) # xml
    
    result = xml_doc.xpath('//li')
    print(result)
    # print(type(result))
    for i in result:
        print(i)
        r = etree.tostring(i)
        print(r)
    

    2. 继续获取
  • 标签的所有 class属性
  • re = xml_doc.xpath('//li/@class')
    print(re)
    

    结果:[‘item-0’, ‘item-1’, ‘item-inactive’, ‘item-1’, ‘item-0’]

    3. 获取
  • 标签下的标签里的所有 href
  • r = xml_doc.xpath('//a/@href')
    # r = xml_doc.xpath('//div')
    print(r)
    

    结果:[‘link1.html’, ‘link2.html’, ‘link3.html’, ‘link4.html’, ‘link5.html’]

    4. 继续获取
  • 标签下hreflink1.html 标签 的文本内容
  • r=xml_doc.xpath('//a[@href="link1.html"]/text()')
    print(r)
    # print(etree.tostring(r[0]))
    

    结果:[‘first item’]

    注意:

    1,只要涉及到条件,加 []

    2,只要获取属性值,加 @

    3,通过text()取内容

    你可能感兴趣的:(python,开发语言)