Skip to content

Latest commit

 

History

History
199 lines (144 loc) · 4.02 KB

File metadata and controls

199 lines (144 loc) · 4.02 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0523
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

lxml 元素 树形结构

回忆

  • 上次了解了 html 中的 dom 树
    • dom树 是 由节点元素组成的
  • html 里面包括子节元素点
    • head
    • body

图片描述

  • requests 得到的是 字节序列
    • 全都 连在一起
    • 怎么他 变成 一棵树
    • 好来 摘取 需要的元素呢 ??🤔

询问ai

  • 把 字节序列 变成 一棵dom树
    • 这个术语 叫 解析HTML

图片描述

  • 我们选择后者
    • 效率高
    • 速度快

lxml

  • 这是目前分析 html 最好的包
    • lxml
    • 是第三方的包

图片描述

  • 哪里查询帮助呢?

搜索

  • 和ai打听 lxml
    • lxml是一个开源的项目
    • http://lxml.de
    • github 的地址也指向这里

图片描述

  • lxml 是 处理 xml 的 liberay
    • l 的意思是 library
    • xml 的意思就是 extensible markup language

打开lxml.de

  • http://lxml.de
    • 用 c 语言写了
    • 高效的 libxml2 和 libxslt 两个类库
    • 并封装成的 api
    • 使用 python语法 调用
    • 生成著名的 ElementTree

图片描述

  • 他可以解析 xml
    • 也可以解析 html
    • 毕竟都是 ml(Markup Language)
    • 树型结构

tutorial

  • 本想 读取网页
    • 然后再生成树

图片描述

  • 目前看起来
    • 要 先用代码 直接生成树
    • 然后 再 处理这棵树
  • 树 先得 扎根

扎根

  • etree 的意思是
    • element tree
    • 元素树
  • 元素树树是
    • 由元素节点构成的

图片描述

  • 哪个元素
    • 是整棵树的根呢?

html元素

  • 获得节点的方式是
    • etree.Element("html")
  • 我们知道 html 元素
    • 是网页文档的根
    • 所有其他元素的根
    • 也是 从无到有生成这棵树的根
from lxml import etree
et_html = etree.Element("html")
print("et_html", et_html)
print("et_html.tag", et_html.tag)
  • 变量名是 et_html

    • et 代表他是 element_tree节点 类型的
    • html 代表他是 html 根节点
  • 运行结果

图片描述

  • 先把 根扎下之后
    • 需要 开枝散叶

开枝

  • 再来个 body
et_body = etree.Element("body")
print("et_body:", et_body)
  • 这次有了两个节点
    • et_html
    • et_body

图片描述

  • 但是 html节点 和 body节点
    • 怎么 建立 关系 呢??

建立层级

et_html.append(et_body)
  • html 节点下
    • append body节点
    • 父子关系由 append 函数确定

图片描述

  • 可以为 html 元素节点
    • 追加 (append)
    • body 子节点

追加

  • 在html元素节点上
    • 附加(append)了body元素
    • 作为 子节点
  • 调用函数的
    • 是 html 元素节点
    • 是父亲
  • 被调用的
    • 是 body 元素节点
    • 是儿子

图片描述

  • 所以主动调用的意义
    • 是多么的重要啊!
    • 这样两个节点就建立了父子关系
  • 可以 看到 这父子关系 吗?

总结

  • 这次了解了
    • 从 字节序列 到 元素树
    • 需要解析
  • 最好 的html解析工具 是
    • lxml

图片描述

  • html 是 body 的 爸爸
    • 如何看到 这父子关系呢?🤔
  • 下次再说👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。