如何用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 】
相关推荐:
Laravel如何升级到最新版本?(升级指南和步骤)
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
Linux网络带宽限制_tc配置实践解析【教程】
如何在橙子建站上传落地页?操作指南详解
Laravel如何生成URL和重定向?(路由助手函数)
Python并发异常传播_错误处理解析【教程】
高端企业智能建站程序:SEO优化与响应式模板定制开发
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel怎么使用Intervention Image库处理图片上传和缩放
Laravel怎么连接多个数据库_Laravel多数据库连接配置
详解MySQL数据库的安装与密码配置
微信小程序制作网站有哪些,微信小程序需要做网站吗?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
如何快速选择适合个人网站的云服务器配置?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Laravel怎么在Controller之外的地方验证数据
,怎么在广州志愿者网站注册?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
Python文件操作最佳实践_稳定性说明【指导】
如何在云主机快速搭建网站站点?
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
如何快速完成中国万网建站详细流程?
如何在阿里云域名上完成建站全流程?
如何在云主机上快速搭建多站点网站?
如何在云服务器上快速搭建个人网站?
高防服务器租用指南:配置选择与快速部署攻略
如何在IIS服务器上快速部署高效网站?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
开心动漫网站制作软件下载,十分开心动画为何停播?
如何彻底删除建站之星生成的Banner?
JavaScript实现Fly Bird小游戏
大同网页,大同瑞慈医院官网?
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Laravel怎么判断请求类型_Laravel Request isMethod用法
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Win11怎么设置默认图片查看器_Windows11照片应用关联设置


entTree解析XML结构