show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 导入了 requests 模块
- requests 帮我们 发请求
- 这样 我们就可以
- 假装自己是一个浏览器
- 完成了 http get 的过程
- 发出了 request
- 得到了 response
- 状态码 200
- 但是读到的内容是
- resposne.content 字节序列
- resposne.text 字符串序列
- 如何解析 html 语言呢?🤔
- 想要解析 html
- 那首先就要了解 html 语言的结构
html
全称h
yper-t
extm
arkupl
anguage- 超文本标记语言
- 是一门 markup(标记性) 的语言
markup
是- 靠
html
元素 - 实现的
- 靠
- 元素 使用的
标签(tag)
包括- 开始标签
- 结束标签
- 标签是成对儿出现的
- 可以在浏览器端修改代码吗?
- F12 可以检查元素
- 也可以右键全部展开
- 将ul修改为ol
- 从 unordered list 无需列表
- 到 ordered list 有序列表
- li就是
- list item
- 列表项
- 可以
- 观察整个结构
- 追根溯源
- 这就是一棵树
- 一棵什么树?
- 一棵 Dom 树
- 什么是 Dom 树呢?
- Document Object Model
- 文档对象模型
- 根节点 是
- html元素
- html元素 长出两个分支
- head元素
- body元素
- 他们 各自底下
- 还有 子节点
- response 到达浏览器后
- 就是一长串字节序列
- 怎么变成我们看到的网页的呢?
- 渲染过程
- 首先需要分词 parse
- 然后根据语义 semantic
- 尝试生成一棵 dom 语义树
- 然后再根据 css 样式表
- 一步步地进行渲染成一个好看的页面
- 爬虫也需要渲染吗?
- 爬虫只看内容
- 不需要渲染
- 但 也需要 生成 dom树
- 怎么 生成 呢?
- 引入一个包
- 这是目前分析 html 最好的包
- lxml
- 是第三方的包
- 哪里查询帮助呢?
- 在百度搜索lxml
- lxml是一个开源的项目
- http://lxml.de
- github 的地址也指向这里
- lxml 是 处理 xml 的 liberay
- l 的意思是 library
- xml 的意思就是 e
x
tensiblem
arkupl
anguage
- lxml
- 用 c 语言写了
- 高效的 libxml2 和 libxslt 两个类库
- 并封装成的 api
- 使用 python 的简洁语法调用
- 生成著名的 ElementTree
- 他可以解析 xml
- 也可以解析 html
- 毕竟都是 ml(Markup Language)
- 树型结构
- 进入教程
- 本来想着是
- 读取一个网页文件
- 然后再生成树
- 但是 目前看起来的思路 是
- 在内存里直接 通过调用函数 生成树
- 然后 再 处理这棵树
- 树嘛
- 首先要有树根节点
- etree 的意思是
- element tree
- 元素树
- 元素树树是
- 由元素节点构成的
- 哪个元素
- 是整棵树的根呢?
- 获得节点的方式是
- 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 根节点
- 运行结果
- 先把 根扎下之后
- 需要 开枝散叶
from lxml import etree
et_html = etree.Element("html")
et_body = etree.Element("body")
print("et_html:", et_html)
print("et_html.tag:", et_html.tag)
print("et_body:", et_body)
print("et_body.tag:", et_body.tag)
-
这次有了两个节点
- et_html
- et_body
-
结果
- 但是html节点和body节点的关系
- 怎么体现呢??
- 了解了 html 中的 dom 树
- dom树 是 由节点元素组成的
- 节点元素可以用 etree.Element()得到
- 最根本的 是 根元素
- 网页文件的根就是 html元素
- html 里面包括子节元素点
- head
- body
- 如何建立节点之间的父子关系呢?🤔
- 下次再说