今天的状态不是很好哦,但是今天学的是xpath解析,好在不是很难,就还行可以接受!xpath解析涉及到一些html和xml的相关知识。也不是很难,记得我第一次做毕业设计的时候看xml慢慢就看懂了。这里需要导入lxml包,我们所需要的xpath在lxml->etree->xpath内。
#xpath是xml文档中搜索内容的一门语言
#html是xml的一个子集
from lxml import etree
从网上随便扒了一段html的代码,然后写进自己创建的html文件中,记得设定编码方式“utf-8
html="""<html lang="zh-Hans-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="shortcut icon" href="//aip.bdstatic.com/easydl/favicon.ico">
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<meta name="importmap-type" content="systemjs-importmap">
<title>EasyDL定制化模型</title>
<link rel="preload" href="//aip-static.cdn.bcebos.com/afe/systemjs/6.3.2/dist/system.min.js" as="script">
<link rel="preload" href="//aip-static.cdn.bcebos.com/afe/systemjs/6.3.2/dist/extras/amd.min.js" as="script">
<link rel="preload" href="//aip-static.cdn.bcebos.com/afe/systemjs/6.3.2/dist/extras/named-exports.min.js" as="script">
<link rel="preload" href="//aip-static.cdn.bcebos.com/afe/systemjs/6.3.2/dist/extras/named-register.min.js" as="script">
<script>var _hmt = window._hmt || [];
(function () {
var hm = document.createElement('script');
hm.src = 'https://hm.baidu.com/hm.js?8b973192450250dd85b9011320b455ba';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</head>
</html>
"""
with open("easydl.html",mode="w",encoding="utf-8") as f:
f.write(html)
f.close()
接下来是xpath解析的重头戏:
把我们设置的html字符串写成etree类型,如果是xml类型的字符串,就用etree.xml。
tree=etree.HTML(html)
接下来的代码段有点乱,今天的状态不算太好。
#①"/"表示层级关系、第一个/表示根节点
#②text()表示拿文本
#③“//”表示后代,在所有后代中寻找
#④"*"表示任意节点,通配符
#③,④不同的点在于,三是在所有的后代中进行搜索,而四是使用一个通配符表示直接后代,类似于占位符
#result=tree.xpath("/html/head//title/text()")
#xpath的顺序是从1开始的,[],表示索引
#result=tree.xpath("/html//link[1]")
#[@]可以通过这种形式通过确定标签的属性来找到需求内容
#result=tree.xpath("/html//link[@rel='preload']")
# head_link_list=tree.xpath("/html//link")
# for link in head_link_list:
# result=link.xpath("./@href")#./表示相对路径,我们已经进入到了link内部,不能再用/,否则回到html。@属性,可以拿到属性值