python-3.x 来自UniProt数据库的Web抓取表

kxxlusnw  于 2023-04-13  发布在  Python
关注(0)|答案(2)|浏览(173)

我有一个UniProt ID列表,想使用BeautifulSoup删除包含结构信息的表。我使用的URL如下:https://www.uniprot.org/uniprot/P03496,登录号为“P03496”。
HTML代码片段如下所示。

<div class="main-aside">
    <div class="content entry_view_content up_entry swissprot">
        <div class="section" id="structure">
            <protvista-uniprot-structure accession="P03468">
                <div class="protvista-uniprot-structure">
                    <div class="class=" protvista-uniprot-structure__table">
                        <protvista-datatable class="feature">
                            <table>...</table>
                        </protvista-datatable>
                    </div>
                </div>
            </protvista-uniprot-structure>
        </div>
    </div>
</div>

我需要的信息包含在<table>...</table>标记之间。
我尽力了

from bs4 import BeautifulSoup
import requests

url='https://www.uniprot.org/uniprot/P03468'
r=requests.get(url)
url=r.content
soup = BeautifulSoup(url,'html.parser')
soup.find("protvista-datatable", {"class": "feature"})
print(soup)
z4iuyo4d

z4iuyo4d1#

内容是动态提供的,如果你深入了解,它并不包含在你的soup中。它不需要BeautifulSoup来获取数据,你的tabel是基于,只需使用他们的API / rest接口来获取JSON形式的结构化数据:

import requests
url='https://rest.uniprot.org/uniprot/P03468'
## fetch the json response
data = requests.get(url).json()
## pick needed data e.g. 
data['uniProtKBCrossReferences']
输出
[{'database': 'EMBL',
  'id': 'J02146',
  'properties': [{'key': 'ProteinId', 'value': 'AAA43412.1'},
   {'key': 'Status', 'value': '-'},
   {'key': 'MoleculeType', 'value': 'Genomic_RNA'}]},
 {'database': 'EMBL',
  'id': 'AF389120',
  'properties': [{'key': 'ProteinId', 'value': 'AAM75160.1'},
   {'key': 'Status', 'value': '-'},
   {'key': 'MoleculeType', 'value': 'Genomic_RNA'}]},
 {'database': 'EMBL',
  'id': 'EF467823',
  'properties': [{'key': 'ProteinId', 'value': 'ABO21711.1'},
   {'key': 'Status', 'value': '-'},
   {'key': 'MoleculeType', 'value': 'Genomic_RNA'}]},
 {'database': 'EMBL',
  'id': 'CY009446',
  'properties': [{'key': 'ProteinId', 'value': 'ABD77678.1'},
   {'key': 'Status', 'value': '-'},
   {'key': 'MoleculeType', 'value': 'Genomic_RNA'}]},
 {'database': 'EMBL',
  'id': 'K01031',
  'properties': [{'key': 'ProteinId', 'value': 'AAA43415.1'},
   {'key': 'Status', 'value': '-'},
   {'key': 'MoleculeType', 'value': 'Genomic_RNA'}]},
 {'database': 'RefSeq',
  'id': 'NP_040981.1',
  'properties': [{'key': 'NucleotideSequenceId', 'value': 'NC_002018.1'}]},
 {'database': 'PDB',
  'id': '6WZY',
  'properties': [{'key': 'Method', 'value': 'X-ray'},
   {'key': 'Resolution', 'value': '1.50 A'},
   {'key': 'Chains', 'value': 'C=181-190'}]},...]
4uqofj5v

4uqofj5v2#

Michael米尔顿(@multimeric)有一个Python包Unipressed,它允许编程访问查询UniProt的新REST API。

示例:

from unipressed import UniprotkbClient
UniprotkbClient.fetch_one("P03468")["uniProtKBCrossReferences"]

输出

[{'database': 'EMBL',
  'id': 'J02146',
  'properties': [{'key': 'ProteinId', 'value': 'AAA43412.1'},
   {'key': 'Status', 'value': '-'},
   {'key': 'MoleculeType', 'value': 'Genomic_RNA'}]},
 {'database': 'EMBL',
  'id': 'AF389120',
  'properties': [{'key': 'ProteinId', 'value': 'AAM75160.1'},
   {'key': 'Status', 'value': '-'},
   {'key': 'MoleculeType', 'value': 'Genomic_RNA'}]},
 {'database': 'EMBL',
  'id': 'EF467823',
  'properties': [{'key': 'ProteinId', 'value': 'ABO21711.1'},
   {'key': 'Status', 'value': '-'},
   {'key': 'MoleculeType', 'value': 'Genomic_RNA'}]},
 {'database': 'EMBL',
  'id': 'CY009446',
  'properties': [{'key': 'ProteinId', 'value': 'ABD77678.1'},
   {'key': 'Status', 'value': '-'},
   {'key': 'MoleculeType', 'value': 'Genomic_RNA'}]},
 {'database': 'EMBL',
  'id': 'K01031',
  'properties': [{'key': 'ProteinId', 'value': 'AAA43415.1'},
   {'key': 'Status', 'value': '-'},
   {'key': 'MoleculeType', 'value': 'Genomic_RNA'}]},
 {'database': 'RefSeq',
  'id': 'NP_040981.1',
  'properties': [{'key': 'NucleotideSequenceId', 'value': 'NC_002018.1'}]},
 {'database': 'PDB',
  'id': '6WZY',
  'properties': [{'key': 'Method', 'value': 'X-ray'},
   {'key': 'Resolution', 'value': '1.50 A'},
   {'key': 'Chains', 'value': 'C=181-190'}]}, ... ]

更多使用Unipressed访问Uniprot新的REST API的例子,请参见我对Biostar的帖子“使用REST API访问UNIPROT”的回复。请参见使用Unipressed进行IDMapherehere,在底部,我包括将“from - to”结果列表转换为Pandas Dataframe 。

相关问题