XPath非python标准库,是lxml库里的一个支持模块,需安装:pip install lxml
lxml python 官方文档:http://lxml.de/index.html
XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的搜索.
XPath的功能非常强大,几乎所有想要定位的节点都可以用 XPath 来选择。
官方文档:https://www.w3.org/TR/xpath/
中文文档:https://www.w3school.com.cn/xpath/index.asp
表 达 式 | 描 述 |
---|---|
nodename | 选取此节点的所有子节点 |
/ | 绝对路径,从当前节点选取直接子节点 |
// | 从当前节点选取子孙节点 |
. | 选取当前节点 |
… | 选取当前节点的父节点 |
@ | 选取属性 |
* | 通配符,代表全部,如//*代表选取当前节点的所有子孙节点 |
[] | 方括号内指定属性值或索引,如://div[@class=‘ul’] 表示选择当前节点下所有class='ul’的子孙div节点 |
最好在浏览器中安装一个插件:Xpath helper,谷歌浏览器直接科学上网去谷歌插件商店下载安装。
有了这个插件,可以直接在网页上操作Xpath表达式,准确的选择需要的数据。
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML和HTML文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
<html lang="en">#根节点
<head>
<meta charset="UTF-8">#charset="UTF-8"是元素
<title>Titletitle>#Title是文本
head>#一对标签之间是命名空间
首先准备一个html文件:练习.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div id="cont">
<ul class="slist">
<li class="item-0">web开发li>
<li class="item-1"><a href="link2.html">爬虫开发a>li>
<li class="item-0 active"><a href="link3.html"><span class="bold">数据分析span>a>li>
<li class="item-1 active"><a href="link4.html">深度学习a>li>
<li class="item-0"><a href="link5.html">机器学习a>li>
ul>
div>
body>
html>
然后导入,解析,tostring()转换成字符串,默认parse()解析结果中的中文是Unicode编码,所以需要声明文件类型也就是解码模式method=“html”,并重新编码 encoding=‘unicode’(按理说应该编码’utf-8’,但是实际操作不行,原理不明。。。):
from lxml import etree