show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次了解了 html 中的 dom 树
- 树是由节点元素组成的
- 节点元素可以用 etree.Element()得到
- 最根本的元素是根元素
- dom-tree 的根就是 html 元素
- html 里面包括子节元素点
- head
- body
- ul
- 重复的li元素怎么添加(append)呢?🤔
- 直接添加列表
- 失败了
- 看来 etree.Element()元素的子节点
- 不能是列表 list 对象
- etree元素 是递归的
- etree元素 下面只能是 etree元素
- 不能是list
- 聪明反被聪明误
- 还是老老实实来逐个添加(append)
- 这次仿佛成功了
- 这些etree元素的子元素
- 可以通过索引[]的方式访问到吗?
- etree元素 也可以用索引方式选择 子etree元素
- 可以用索引找到下级元素
- 可以访问嵌套更深的元素吗?
- 可以访问到更深的元素
- 从这一点上看
- etree.Element有点像列表
- 但 etree元素 不是列表
- etree元素 也可以用索引方式选择子节点
- 切片选择的结果类型是列表
- 列表中的列表项是 etree元素
- 判断是否是元素
- 如果是元素
- 有几个子元素
- 可以用 len 得到元素的子元素数量
- 结果
- 是否可以遍历etree中的所有子元素呢?
- 参照例子
- 遍历html元素
- 结果
- body下面还有ul元素呢?
- 我还想往下遍历
- 循环遍历body元素
- et_html[1]
- 其实就是et_body
- et_body里面
- 有个et_ul元素
- 我希望
- et_body里面有两个元素
- h1
- ul
- et_body里面有两个元素
- 而且
- h1是哥哥在先
- ul是弟弟在后
- 可能么?
- 目前的结构是这样的
- 如果
et_html.append(et_h1)
会导致h1会被追加append- h1一定是弟弟
- 除了append还有其他函数么?
- 那怎么查到相关的帮助呢?
- 看起来和list.insert很像
- 在指定位置插入元素
- 可以试试吗?
- 结果
- 这个元素和列表为什么那么相像?
- 函数名、遍历方法、索引切片
- 都太像了
from lxml import etree
et_html = etree.Element("html")
et_head = etree.Element("head")
et_title = etree.Element("title")
et_body = etree.Element("body")
et_h1 = etree.Element("h1")
et_ul = etree.Element("ul")
et_li0 = etree.Element("li")
et_li1 = etree.Element("li")
et_li2 = etree.Element("li")
et_html.append(et_head)
et_head.append(et_title)
et_html.append(et_body)
et_body.append(et_ul)
et_ul.append(et_li0)
et_ul.append(et_li1)
et_ul.append(et_li2)
et_body.insert(0,et_h1)
print(etree.tostring(et_html,pretty_print=True).decode())
for elem in et_html[1]:
print(elem.tag, ":", elem)
- 我们先去总结吧
- 了解 etree 中的元素关系
- 父子
- 兄弟
- etree里面元素的访问方法
- 索引 index
- 切片 slice
- 遍历 interator
- 为什么etree.Element和list这么像呢?🤔
- 下次再说