
Python domer包 完整使用指南python-domer是Python中轻量级、高性能的DOM/HTML解析与操作库专为简化HTML/XML文档的节点查询、增删改查、属性操作、文本提取等场景设计语法简洁兼容主流选择器类jQuery/CSS选择器无需依赖复杂的浏览器渲染引擎纯Python实现适合爬虫、HTML处理、模板生成等开发场景。一、核心功能DOM节点解析快速解析HTML/XML字符串、本地文件、网络响应文本节点选择支持标签选择器、类选择器、ID选择器、属性选择器、层级选择器节点操作新增、删除、修改、替换DOM节点属性操作获取/设置/删除节点的class、id、src、href等属性文本/HTML操作提取节点纯文本、获取节点内部HTML、修改节点内容遍历DOM父节点、子节点、兄弟节点快速遍历序列化将修改后的DOM重新输出为HTML/XML字符串轻量无依赖纯Python编写不依赖lxml、BeautifulSoup等第三方库二、安装方法1. 标准pip安装推荐# 安装最新版pipinstallpython-domer# 指定版本安装pipinstallpython-domer0.1.52. 源码安装gitclone https://github.com/xxx/python-domer.gitcdpython-domer python setup.pyinstall3. 验证安装importdomerprint(domer.__version__)# 输出版本号即安装成功三、基础语法与核心参数1. 初始化DOM对象fromdomerimportDomer# 1. 解析HTML字符串html div idcontainer p classtextHello Domer/p a hrefhttps://www.baidu.com百度/a /div domDomer(html)# 核心初始化传入HTML/XML字符串# 2. 解析本地HTML文件# dom Domer.from_file(index.html)# 3. 解析网络HTML配合requests# import requests# resp requests.get(https://www.baidu.com)# dom Domer(resp.text)2. 核心选择器语法类CSS/jQuery选择器类型语法示例说明标签选择器dom.find(p)匹配所有p标签ID选择器dom.find(#container)匹配idcontainer的节点类选择器dom.find(.text)匹配classtext的节点属性选择器dom.find(a[href])匹配包含href属性的a标签精准属性dom.find(a[hrefhttps://xxx])匹配指定属性值的标签层级选择器dom.find(div p)匹配div下的所有p子节点多选择器dom.find(p,.text,#container)同时匹配多个选择器3. 核心方法与参数1节点查询方法# 1. find(selector, limitNone)查询所有匹配节点# selector选择器字符串必传# limit最大返回节点数可选默认返回所有nodesdom.find(p,limit2)# 2. find_one(selector)查询第一个匹配节点常用nodedom.find_one(.text)# 3. children(selectorNone)获取直接子节点childsdom.find_one(#container).children(p)# 4. parent()获取父节点parent_nodenode.parent()# 5. siblings(selectorNone)获取兄弟节点sibsnode.siblings()2节点属性操作nodedom.find_one(a)# 获取属性hrefnode.attr(href)# 传属性名获取值all_attrsnode.attr()# 不传参数返回所有属性字典# 设置属性node.attr(target,_blank)# 新增/修改属性node.attr({class:link,id:mylink})# 批量设置# 删除属性node.remove_attr(href)3文本/HTML操作# 获取纯文本自动去除HTML标签textnode.text()# 设置文本覆盖原有内容node.text(新的文本内容)# 获取节点内部HTMLinner_htmlnode.html()# 设置节点内部HTMLnode.html(span嵌套HTML/span)# 获取节点外部HTML包含自身标签outer_htmlnode.outer_html()4节点增删改containerdom.find_one(#container)# 新增子节点末尾追加container.append(p新增段落/p)# 前置插入节点当前节点前container.prepend(h1标题/h1)# 替换节点node.replace_with(div替换内容/div)# 删除节点node.remove()# 清空子节点container.empty()5DOM序列化# 输出完整HTML字符串new_htmldom.to_html()print(new_html)# 保存到本地文件dom.to_file(output.html)四、8个实际应用案例案例1基础HTML文本信息提取爬虫入门场景从静态HTML中提取标题、链接、文本fromdomerimportDomer# 模拟网页HTMLhtml div classarticle h1 idtitlePython Domer使用教程/h1 p classcontentDomer是轻量级DOM解析库/p a hrefhttps://demo.com classlink官方文档/a /div # 解析提取domDomer(html)titledom.find_one(#title).text()contentdom.find_one(.content).text()linkdom.find_one(a.link).attr(href)print(标题,title)print(内容,content)print(链接,link)案例2批量爬取列表数据商品/新闻列表场景提取HTML列表中所有商品名称和价格fromdomerimportDomer html ul classgoods-list lispan classname手机/spanspan classprice3999/span/li lispan classname电脑/spanspan classprice5999/span/li lispan classname耳机/spanspan classprice299/span/li /ul domDomer(html)goods[]# 遍历所有列表项forliindom.find(.goods-list li):nameli.find_one(.name).text()priceli.find_one(.price).text()goods.append({名称:name,价格:price})print(goods)案例3HTML节点修改与属性替换场景批量修改所有链接的打开方式、替换图片地址fromdomerimportDomer html a hrefpage1.html页面1/a a hrefpage2.html页面2/a img srcold.jpg domDomer(html)# 批量修改a标签属性foraindom.find(a):a.attr(target,_blank)# 新窗口打开a.attr(rel,noopener)# 修改图片srcdom.find_one(img).attr(src,new.jpg)# 输出修改后的HTMLprint(dom.to_html())案例4本地HTML文件解析与修改场景读取本地HTML文件修改内容后保存fromdomerimportDomer# 从本地文件加载DOMdomDomer.from_file(index.html)# 修改页面标题dom.find_one(title).text(新页面标题)# 新增页脚dom.find_one(body).append(footer版权所有 © 2025/footer)# 保存修改后的文件dom.to_file(new_index.html)print(文件修改完成)案例5DOM节点删除与清空场景清理HTML中的广告、无用标签、空节点fromdomerimportDomer html div正文内容/div div classad广告内容/div div classempty/div domDomer(html)# 删除广告节点dom.find_one(.ad).remove()# 清空空节点dom.find_one(.empty).empty()print(dom.to_html())案例6嵌套DOM层级查询复杂HTML解析场景解析多层嵌套的HTML提取深层节点数据fromdomerimportDomer html div idwrap div classbox ul lispan数据1/span/li lispan数据2/span/li /ul /div /div domDomer(html)# 层级选择器精准查询datadom.find(#wrap .box ul li span)foritemindata:print(item.text())案例7动态生成HTML模板场景用Domer拼接生成HTML页面替代字符串拼接fromdomerimportDomer# 初始化空DOMdomDomer(html/html)bodydom.find_one(html).append(body/body)# 动态生成内容dom.find_one(body).html( h1动态生成页面/h1 p使用Domer快速构建HTML/p )# 输出完整HTMLprint(dom.to_html())案例8配合requests爬取网页真实数据场景网络爬虫Domer解析网页实战常用importrequestsfromdomerimportDomer# 爬取百度首页resprequests.get(https://www.baidu.com)resp.encodingutf-8# 解析页面domDomer(resp.text)# 提取百度热搜示例hot_searchdom.find_one(#hotsearch).text()print(百度热搜,hot_search)五、常见错误与解决方案1. 导入错误ModuleNotFoundError: No module named domer原因未安装包/安装环境错误解决# 确认安装pipinstallpython-domer# 检查Python环境多环境时用对应pippython-mpipinstallpython-domer2. 查询返回None/空列表原因选择器语法错误大小写、符号错误HTML结构与选择器不匹配节点是动态渲染JS加载Domer无法解析解决检查选择器拼写ID用#、类用.打印原始HTML确认节点存在动态页面改用Selenium3. 属性获取报错AttributeError原因对None对象调用attr()/text()解决查询后增加非空判断nodedom.find_one(#not-exist)ifnode:# 必须判断print(node.text())4. HTML解析乱码原因编码不匹配解决指定编码解析/统一UTF-8# 读取文件指定编码domDomer.from_file(index.html,encodingutf-8)5. 节点操作不生效原因操作后未调用to_html()序列化解决修改DOM后必须输出新HTMLnode.text(修改)print(dom.to_html())# 必须执行六、使用注意事项选择器严格区分大小写HTML标签/类名大小写敏感需与原文一致不支持动态JS渲染仅解析静态HTMLVue/React渲染的页面需先获取静态HTML空节点安全判断所有find_one查询必须做非空判断避免程序崩溃性能优化大数据量HTML用limit参数限制返回数量减少内存占用编码统一全程使用utf-8编码避免中文乱码与其他库兼容可与BeautifulSoup、lxml共存按需选择使用版本兼容支持Python3.6不支持Python2总结python-domer是纯Python轻量级DOM解析库语法贴近jQuery无第三方依赖适合HTML/XML处理、爬虫开发核心能力选择器查询、节点/属性/文本操作、序列化输出满足90%HTML处理场景8个实战案例覆盖数据提取、爬虫、HTML修改、模板生成、文件处理等主流用法使用核心注意非空判断、选择器精准、编码统一、不支持动态JS。《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章前6章涵盖深度学习基础包括张量运算、神经网络原理、数据预处理及卷积神经网络等后5章进阶探讨图像、文本、音频建模技术并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法每章附有动手练习题帮助读者巩固实战能力。内容兼顾数学原理与工程实现适配PyTorch框架最新技术发展趋势。