如何用Python解析PubMed的XML数据
发布时间 - 2025-12-26 00:00:00 点击率:次Python解析PubMed XML需先用Biopython Entrez获取数据(设邮箱、控频次),再用ElementTree解析嵌套结构:标题//ArticleTitle、摘要//AbstractText、作者//AuthorList/Author等,注意命名空间、字段缺失及HTML标签清理,最后封装为返回结构化字典列表的健壮函数。
用Python解析PubMed的XML数据,核心是读取NCBI提供的XML格式文献记录(如通过Entrez.esearch和Entrez.efetch获取),再用标准库xml.etree.ElementTree或第三方库(如lxml)提取所需字段。关键不在于“能不能”,而在于理解PubMed XML的嵌套结构和常用标签路径。
获取PubMed XML数据
先通过Biopython的Entrez模块获取原始XML。需设置邮箱(NCBI强制要求),并指定数据库、检索词和返回格式:
- 使用
Entrez.esearch获取PMID列表(限制条数避免超时) - 用这些PMID调用
Entrez.efetch,参数rettype="xml"确保返回XML而非摘要文本 - 注意处理HTTP错误、频率限制(加
time.sleep(1))和编码问题(响应默认为字节,需解码为字符串)
用Elem
entTree解析XML结构
PubMed XML是典型的嵌套层级结构,顶层为PubmedArticleSet,每个文献是PubmedArticle,内部包含MedlineCitation和PubmedData两大部分。常用字段路径示例:
-
标题:
.//ArticleTitle/text() -
摘要:
.//AbstractText/text()(可能有多个AbstractText节点,含Label属性区分背景/方法等) -
作者列表:
.//AuthorList/Author/LastName/text()和.//AuthorList/Author/Initials/text() -
DOI:
.//ArticleId[IdType="doi"]/text() -
出版年份:
.//PubDate/Year/text()(注意有些只有MedlineDate,需回退提取)
处理常见陷阱
实际解析中容易踩坑,需针对性处理:
-
命名空间问题:PubMed XML带默认命名空间(如
xmlns="http://www.nlm.nih.gov/..."),直接用find()会失败。解决方法:忽略命名空间(用{*}通配符)或预定义命名空间字典传入findall() -
缺失字段:不是每篇都有摘要、DOI或完整作者名。务必用
find()而非findtext(),再判空,避免AttributeError -
特殊字符与换行:标题/摘要中含
&、等实体,ElementTree会自动解码;但AbstractText可能含等HTML标签,需额外清理(如用re.sub(r"]+>", "", text))
封装成可复用函数
把获取+解析逻辑打包,输入关键词和最大返回数,输出结构化字典列表:
- 函数内统一处理异常(URLError、HTTPError、ParseError)
- 对每个
PubmedArticle节点单独解析,避免因某条数据异常中断全部流程 - 返回字段建议包括:pmid、title、abstract、authors(列表)、year、doi、journal,便于后续存CSV或导入pandas
# python
# html
# go
# 编码
# 字节
# csv
# 解决方法
# 邮箱
# 标准库
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python函数文档自动校验_规范解析【教程】
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
如何在万网利用已有域名快速建站?
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
如何用VPS主机快速搭建个人网站?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
如何在阿里云虚拟服务器快速搭建网站?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
,在苏州找工作,上哪个网站比较好?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Python文件异常处理策略_健壮性说明【指导】
,交易猫的商品怎么发布到网站上去?
深圳网站制作平台,深圳市做网站好的公司有哪些?
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
实例解析Array和String方法
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
个人摄影网站制作流程,摄影爱好者都去什么网站?
网站制作壁纸教程视频,电脑壁纸网站?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
如何快速搭建安全的FTP站点?
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
如何为不同团队 ID 动态生成多个独立按钮
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
高防服务器租用首荐平台,企业级优惠套餐快速部署
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
浅谈javascript alert和confirm的美化
怎样使用JSON进行数据交换_它有什么限制
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
昵图网官网入口 昵图网素材平台官方入口
大同网页,大同瑞慈医院官网?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
C++时间戳转换成日期时间的步骤和示例代码
如何用PHP工具快速搭建高效网站?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Android中AutoCompleteTextView自动提示
jquery插件bootstrapValidator表单验证详解
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何在IIS服务器上快速部署高效网站?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
使用C语言编写圣诞表白程序
如何彻底卸载建站之星软件?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
Laravel如何处理CORS跨域请求?(配置示例)
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤


entTree解析XML结构