python - BioPython:将 JSON 键值平展为 Pandas DataFrame
问题描述
我需要一个爬虫模块,它可以从 PUBMED 收集几个给定关键字(例如 Eye)和预先指定的时间窗口(例如 01/01/2015 – 08/06/2018)的论文标题、作者列表、发表时间和摘要),并且检索到的数据应保存为 JSON 格式。我能够抓取网站并将数据存储在 JSON 文件中。
但是,我无法展平嵌套的键值来创建数据框,列标题为“论文标题、作者列表、出版时间和摘要”。
请帮忙。
到目前为止的努力如下:
import Bio
from Bio import Entrez
import json
import requests
import pandas as pd
from pprint import pprint
from pandas.io.json import json_normalize
import pandas as pd
def search(query):
Entrez.email = 'my.email@gmail.com'
handle = Entrez.esearch(db='pubmed', sort='relevance', retmax='100', retmode='xml', term=query)
results = Entrez.read(handle)
return results
def fetch_details(id_list):
ids = ','.join(id_list)
Entrez.email = 'my.email@gmail.com'
handle = Entrez.efetch(db='pubmed', retmode='xml', id=ids)
results = Entrez.read(handle)
return results
if __name__ == '__main__':
results = search('Eye')
id_list = results['IdList']
papers = fetch_details(id_list)
for i, paper in enumerate(papers['PubmedArticle']):
print("%d) %s" % (i+1, paper['MedlineCitation']['Article']['ArticleTitle']))
解决方案
推荐阅读
- sql - MS Access:根据另一个表字段的多条记录从一个表中选择记录
- c++ - 基类被调用的方法
- php - 在 XAMPP 上使用 PHP 创建 XML 数据文件在 Mac 上不起作用(显示空白页)
- javascript - 使用CSS在背景网格上以垂直间隔渲染文本?
- python - 如何在tkinter中将框架向左对齐?
- android - 是否可以以root身份运行android应用程序
- python - pyparsing 在递归结构上失败
- python - 我在 pandas 中收到一个错误,因为我的数据框太大,我该如何克服这个错误?
- wordpress - Cpanel - 为外部域安装 SSL 证书
- javascript - 如何禁用打字稿以使我的 nextjs 构建失败?