通过beautifulsoup python从XML文件中提取基于名称标签的信息

时间:2017-05-10 07:27:04

标签: python xml python-3.x beautifulsoup extract

  • 在python 3.5中 - 我使用Entrez biopython从pubmed生物医学网站的Database = pmc中提取一些信息。现在我想从XML文件:

    <DocSum>
    <Id>5412469</Id>
    <Item Name="PubDate" Type="Date">2017 Apr 22</Item>
    <Item Name="EPubDate" Type="Date">2017 Apr 22</Item>
    <Item Name="Source" Type="String">Int J Mol Sci</Item>
    <Item Name="AuthorList" Type="List">
        <Item Name="Author" Type="String">Guo Y</Item>
        <Item Name="Author" Type="String">Bao Y</Item>
        <Item Name="Author" Type="String">Yang W</Item>
    </Item>
    <Item Name="Title" Type="String">Regulatory miRNAs in Colorectal Carcinogenesis and Metastasis</Item>
    <Item Name="Volume" Type="String">18</Item>
    <Item Name="Issue" Type="String">4</Item>
    <Item Name="Pages" Type="String">890</Item>
    <Item Name="ArticleIds" Type="List">
        <Item Name="pmid" Type="String">28441730</Item>
        <Item Name="doi" Type="String">10.3390/ijms18040890</Item>
        <Item Name="pmcid" Type="String">PMC5412469</Item>
    </Item>
    <Item Name="DOI" Type="String">10.3390/ijms18040890</Item>
    <Item Name="FullJournalName" Type="String">International Journal of Molecular Sciences</Item>
    <Item Name="SO" Type="String">2017 Apr 22;18(4):890</Item>
    

提取名称=标题{精确到线下}:

 <Item Name="Title" Type="String">Regulatory miRNAs in Colorectal Carcinogenesis and Metastasis</Item>

但我该如何解决这个问题呢? 虽然我已经使用过此代码:

    for tag in soup.findAll("docsum"): # I'm working with multiple articles in one file
    for a_tag in tag.findAll("item"):
        a_recs.append(a_tag.text)

return a_recs

但它返回一个列表中的所有值,而我只需要标题。如下:

['2017 Apr 22', '2017 Apr 22', 'Int J Mol Sci', '\nGuo Y\nBao Y\nYang W\n', 'Guo Y', 'Bao Y', 'Yang W', 'Regulatory miRNAs in Colorectal Carcinogenesis and Metastasis', '18', '4', '890', '\n28441730\n10.3390/ijms18040890\nPMC5412469\n', '28441730', '10.3390/ijms18040890', 'PMC5412469', '10.3390/ijms18040890', 'International Journal of Molecular Sciences', '2017 Apr 22;18(4):890']

1 个答案:

答案 0 :(得分:0)

尝试:

>>> data = '''
... <DocSum>
... <Id>5412469</Id>
... <Item Name="PubDate" Type="Date">2017 Apr 22</Item>
... <Item Name="EPubDate" Type="Date">2017 Apr 22</Item>
... <Item Name="Source" Type="String">Int J Mol Sci</Item>
... <Item Name="AuthorList" Type="List">
...     <Item Name="Author" Type="String">Guo Y</Item>
...     <Item Name="Author" Type="String">Bao Y</Item>
...     <Item Name="Author" Type="String">Yang W</Item>
... </Item>
... <Item Name="Title" Type="String">Regulatory miRNAs in Colorectal Carcinogenesis and Metastasis</Item>
... <Item Name="Volume" Type="String">18</Item>
... <Item Name="Issue" Type="String">4</Item>
... <Item Name="Pages" Type="String">890</Item>
... <Item Name="ArticleIds" Type="List">
...     <Item Name="pmid" Type="String">28441730</Item>
...     <Item Name="doi" Type="String">10.3390/ijms18040890</Item>
...     <Item Name="pmcid" Type="String">PMC5412469</Item>
... </Item>
... <Item Name="DOI" Type="String">10.3390/ijms18040890</Item>
... <Item Name="FullJournalName" Type="String">International Journal of Molecular Sciences</Item>
... <Item Name="SO" Type="String">2017 Apr 22;18(4):890</Item>'''
>>> 
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(data, 'xml')

>>> for tag in soup.findAll("DocSum"):
...    for a_tag in tag.find("Item", {"Name" : "Title"}):
...       a_recs.append(a_tag)
... 
>>> a_recs
['Regulatory miRNAs in Colorectal Carcinogenesis and Metastasis']