lxml 库是一款 Python 数据解析库,参考重要文档在 lxml - Processing XML and HTML with Python,项目开源地址在:GitHub - lxml/lxml: The lxml XML toolkit for Python
在Python中,为了使用XPath,需要安装一个第三方库:lxml,使用lxml才能从html通过xpath方法读取内容
- import lxml.html
- selector=lxml.html.fromstring(html2)
- content=selector.xpath('//div[contains(@id,"-key")]/text()')
xpath的核心思想是写地址
获取文本:

获取属性值

//开始为绝对路径,从需要提取的内容往上找标签,找到一个拥有“标志性属性值”的标签为止。
- <div class="userful">
- <ul>
- <li class="info">我需要的信息1li>
- <li class="test">我需要的信息2li>
- <li class="strange">我需要的信息3li>
- ul>
- div>
如这段内容,//div[@class='useful']/ul/li/text()就能得到三个文本信息。
如果只需要提取某些属性开头的内容,可用如下方法
//标签[starts-with(@属性名,"相同的开头部分")]
- html2="""
-
-
测试 - 需要的内容1
- 需要的内容2
- 不需要的内容1
- """
- import lxml.html
- selector=lxml.html.fromstring(html2)
- content=selector.xpath('//div[starts-with(@id,"test")]/text()')
- for each in content:
- print(each)

如果提取内容属性值包含相同字符串,可以用contains方法
- html2="""
-
-
测试 - 需要的内容1
- 需要的内容2
- 不需要的内容1
- """
- import lxml.html
- selector=lxml.html.fromstring(html2)
- content=selector.xpath('//div[contains(@id,"-key")]/text()')
- for each in content:
- print(each)

XPath也支持先抓大再抓小
- html2="""
-
-
测试 -
-
- 我需要的信息1
-
- 我需要的信息2
-
- 我需要的信息3
-
-
-
- 垃圾1
-
- 垃圾2
-
- """
- import lxml.html
- selector=lxml.html.fromstring(html2)
- content=selector.xpath('//div[@class="userful"]/ul/li/text()')
- for each in content:
- print(each)

也可以:
- html2="""
-
-
测试 -
-
- 我需要的信息1
-
- 我需要的信息2
-
- 我需要的信息3
-
-
-
- 垃圾1
-
- 垃圾2
-
- """
- import lxml.html
- selector=lxml.html.fromstring(html2)
- useful=selector.xpath('//div[@class="userful"]')#这里返回一个列表
- infolist=useful[0].xpath('ul/li/text()')
- print(infolist)

先获取节点,再对节点使用xpath,用string(.)函数提取。
