Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0531
- 这是 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`
---- 终于可以通过字符串
- 构建一棵 etree 的节点树了
- 通过 etree.HTML()函数
- 将网页源文件进行 parse(语法分析)生成一棵 etree
- 要总装了
- 把一切串联起来
- 将request 得到的 response.content
- 当做 etree.HTML()需要的参数
- 想 把爬到的字节序列
- 生成 节点树?🤔
- 这
可能吗?🤔
- 启动 nginx
sudo service nginx start
sudo service nginx status
firefox http://localhost &
- 浏览器中 确认
- 已经在 localhost 启动web服务
- 先去 游乐场
- 试试 用python 发请求 接响应
import requests
response = requests.get("http://localhost")
response.status_code
- 状态码 为 200
- 可以 得到
源文件吗?
response.text
response.content
- 两种形式的 响应
- text 字符串
- content 字节序列
- 可以 用响应 生成
元素树吗?
from lxml import etree
b_html = response.content
et_html = etree.HTML(b_html)
print(etree.tostring(et_html,pretty_print=True).decode())
- 用字节序列形式的
- response.content
- 确实可以生成元素树
- 好像没有 缩进(indent)
- 设置 缩进(indent)
etree.indent(et_html, " ")
print(etree.tostring(et_html,pretty_print=True).decode())
- 缩进成功
- 可以
遍历这棵 etree吗?
for element in et_html.iter():
print(element.tag, element.text)- 确实可以遍历整棵树
- 我可以
只输出 body元素 对应的分支吗?
- body元素是
- html 的 第
1个子节点 - et_html[1]
- html 的 第
print(etree.tostring(et_html[1],pretty_print=True).decode())- 只输出body
- 遍历body子节点
for element in et_html[1].iter():
print(element.tag, element.text)
- 遍历body下 所有子节点
- 如果我想 筛出
- body中的 a元素 呢?
for element in et_html[1].iter("a"):
print(element.tag, element.text)
- 遍历的时候 对a元素 进行筛选
- 筛选出
- 所有a元素
- 及其文本
- 观察源码
- 我 还想看看
- a.attrib
for element in et_html[1].iter("a"):
print(element.tag)
print(element.text)
print(element.attrib)
print("================")
- 最终结果
- 想在字典中
- 根据key找到value
for element in et_html[1].iter("a"):
print(element.tag)
print(element.text)
print(element.attrib)
print(element.attrib["href"])
print("================")
- 输出结果
- 确实对应上源码中的超链接
- 上次 将 字符串
- 转化为 etree节点
- 这次
- 发送requests
- 返回的response
- 将 response 作为 源头
- 生成etree节点
- 但是 如果 网页文件 的 编码格式
- 不是utf-8
- 而是gb2312呢??🤔
- 下次再说 👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。














