爬虫从入门到入预(9)

今天的状态不是很好哦,但是今天学的是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。@属性,可以拿到属性值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值