本地文件用ElementTree.parse(),网络XML字符串用fromstring();命名空间需显式声明或用".//tag"模糊匹配;text为空时应strip()判断,含子标签用itertext()拼接。

Python爬虫怎么解析XML数据_使用ElementTree进行结构化查询

ElementTree.parse() 和 ElementTree.fromstring() 用哪个?

数据来源决定了一切。本地磁盘上的文件,直接调用 parse() 就行,它只认文件路径或类文件对象。但如果你是从网络请求拿到的 XML 字符串——比如 response.text——就得用 fromstring()。搞混了?那等着 ParseError: not well-formed (invalid token) 吧,因为 parse() 根本不接受纯字符串。

查不到节点?小心命名空间(namespace)

很多 XML 都带着命名空间,尤其 RSS、SOAP、Atom 这些老面孔。比如 ,这时候你直接写 root.find("item") 肯定返回 None——因为默认 namespace 是空字符串,而实际节点藏在另一个 namespace 下。这不是 bug,是标准行为,但确实容易让人抓狂。

text 属性为空?可能是换行或空白字符

XML 里换行和缩进会被解析成文本节点,所以 elem.text 经常是 "\n " 而不是你期望的内容。这真不是 bug,是标准行为——但坑得人不少。

用 findall() 还是 iter()?性能和语义差别明显

findall() 只查直接子节点,iter() 则深度遍历整棵树——用错场景很容易出事,尤其当结构不确定的时候。

解析 XML 最容易卡住的从来不是语法,而是命名空间和空白文本这些隐式行为。一旦遇到 None 或空字符串,先盯住这两点,比重写整个解析逻辑快得多。

本文转载于:https://www.php.cn/faq/2324239.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。