Python:如果XML标签不存在,我需要打印'Blank'和Output
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:如果XML标签不存在,我需要打印'Blank'和Output相关的知识,希望对你有一定的参考价值。
忽略下面的文本段落
XML代码是万维网联盟(W3C)的正式推荐,类似于超文本标记语言(HTML)。 XML和HTML都包含用于描述页面或文件内容的标记符号。 HTML代码仅描述网页内容(主要是文本和图形图像)的显示方式和交互方式。
XML数据被称为自描述或自定义,意味着数据的结构嵌入了数据,因此当数据到达时,不需要预先构建结构来存储数据;它在XML中被动态理解。 XML格式可供希望以一致方式共享信息的任何个人或个人或公司组使用。 XML实际上是标准通用标记语言(SGML)的一个更简单且更易于使用的子集,它是创建文档结构的标准。
因此,我使用下面的代码来提取所有5个字段。
import requests
from bs4 import BeautifulSoup
import lxml
soup = BeautifulSoup(contents,'lxml')
a=[v.get_text() for v in soup.select('cia')]
v=[v.get_text() for v in soup.select('civ')]
p=[v.get_text() for v in soup.select('cip')]
y=[v.get_text() for v in soup.select('ciy')]
t=[v.get_text() for v in soup.select('cit')]
print (a)
print (v)
print (p)
print (y)
print (t)
答案
您可以尝试这样的事情:创建一个生成器,它将从存储在字典中的XML文件中产生值。 XML文件中缺少的值将在此字典中存储为“Blank”:
from bs4 import BeautifulSoup
data = """<CI_INFO>
<CI_JOURNAL>
<CI_AUTHOR>CAMPBELL D</CI_AUTHOR>
<CI_VOLUME>0079</CI_VOLUME>
<CI_PAGE>00034</CI_PAGE>
<CI_YEAR>2013</CI_YEAR>
<CI_TITLE> <![CDATA[ ALASKA MAGAZINE FEB ]]></CI_TITLE>
</CI_JOURNAL>
<CI_JOURNAL>
<CI_AUTHOR>BURKE CH</CI_AUTHOR>
<CI_YEAR>1961</CI_YEAR>
<CI_TITLE> <![CDATA[ DOCTOR HAP ]]> </CI_TITLE>
</CI_JOURNAL>
<CI_JOURNAL>
<CI_YEAR>1905</CI_YEAR>
<CI_TITLE> <![CDATA[ REPORT GOVERNOR ALAS ]]></CI_TITLE>
</CI_JOURNAL>
</CI_INFO>"""
def parse_data(soup):
_text = lambda soup, name: soup.find(name).text.strip() if soup.find(name) else 'Blank'
for j in soup.select('CI_JOURNAL'):
d = {}
d['author'] = _text(j, 'CI_AUTHOR')
d['vol'] = _text(j, 'CI_VOLUME')
d['page'] = _text(j, 'CI_PAGE')
d['year'] = _text(j, 'CI_YEAR')
d['title'] = _text(j, 'CI_TITLE')
yield d
for info in parse_data(BeautifulSoup(data, 'xml')):
print(info['author'])
print(info['vol'])
print(info['page'])
print(info['year'])
print(info['title'])
print('-' * 80)
这将打印:
CAMPBELL D
0079
00034
2013
ALASKA MAGAZINE FEB
--------------------------------------------------------------------------------
BURKE CH
Blank
Blank
1961
DOCTOR HAP
--------------------------------------------------------------------------------
Blank
Blank
Blank
1905
REPORT GOVERNOR ALAS
--------------------------------------------------------------------------------
编辑:
如果需要分隔列,可以执行以下操作:
author, vol, page, year, title = [], [], [], [], []
for d in parse_data(BeautifulSoup(data, 'xml')):
author.append(d['author'])
vol.append(d['vol'])
page.append(d['page'])
year.append(d['year'])
title.append(d['title'])
print(author)
print(vol)
print(page)
print(year)
print(title)
这打印:
['CAMPBELL D', 'BURKE CH', 'Blank']
['0079', 'Blank', 'Blank']
['00034', 'Blank', 'Blank']
['2013', '1961', '1905']
['ALASKA MAGAZINE FEB', 'DOCTOR HAP', 'REPORT GOVERNOR ALAS']
编辑:
要使用' '
进行打印,您可以使用以下代码:
print('> ' + str(author))
print(' ' + str(vol))
print(' ' + str(page))
print(' ' + str(year))
print(' ' + str(title))
这将打印:
> ['CAMPBELL D', 'BURKE CH', 'Blank']
['0079', 'Blank', 'Blank']
['00034', 'Blank', 'Blank']
['2013', '1961', '1905']
['ALASKA MAGAZINE FEB', 'DOCTOR HAP', 'REPORT GOVERNOR ALAS']
以上是关于Python:如果XML标签不存在,我需要打印'Blank'和Output的主要内容,如果未能解决你的问题,请参考以下文章