提取xml格式新闻内容

来源:互联网 发布:淘宝联盟和淘客联盟 编辑:程序博客网 时间:2024/06/03 06:55

最开始解决方案有两种:
1) 使用正则表达式,匹配xml格式中的所有中文字符。
2) 使用BeautifulSoup的get_text()方法提取新闻内容
第一种方法,在进行中,后面更新
本文只展示第二种方法,因为无意之间发现了这个方法,简直不要太方便。
以下是初始文本,文本比较长,只展示了部分:

<?xml version="1.0" encoding="UTF-8"?><Body>     <Title>成都网友称震感强烈 女同事当即哭泣</Title>      <ReportTime type="absTime">2008年05月12日16:15</ReportTime>      <Content>          <Paragraph>             <Sentence>                 <Event eid="e1">                    <Time type="relTime" tid="t1">5月12日14时28分</Time><Location lid="l1">四川</Location>发生7.8级                    <Denoter type="emergency" did="d1">地震</Denoter></Event>             </Sentence>         </Paragraph>          <Paragraph>             <Sentence>                 <Event eid="e2">                    <Time type="absTime" tid="t2">15时50分</Time>,新民网                    <Participant sid="s1">记者</Participant>网上                    <Denoter type="action" did="d2">连线</Denoter>成都网友                    <Participant oid="o2">姚先生</Participant>                </Event></Sentence>              <Sentence>                 <Event eid="e3">                    <Participant sid="s3,s4,s6,s7,s8,s9,s10">姚先生</Participant>                    <Time type="relTime" tid="t3">当时</Time>正在                    <Location lid="l3">成都市武侯区的办公室</Location>                    <Denoter type="action" did="d3">打电话</Denoter></Event>                  <Event eid="e4" type="thoughtevent">突然                    <Denoter type="statement" did="d4">感觉</Denoter>                </Event>  

只提取标签中的文本,使用BeautifulSoup库提取当中的内容:

from bs4 import BeautifulSoup as bsf = open(r"C:\Users\zss0330816\Desktop\成都网友称震感强烈女同事当即哭泣.xml",encoding = 'utf-8')data = f.read()data#获取到数据

结果如下:
1)格式杂乱无章,

'<?xml version="1.0" encoding="UTF-8"?>\n\n<Body> \n\t<Title>成都网友称震感强烈 女同事当即哭泣</Title>  \n\t<ReportTime type="absTime">2008年05月12日16:15</ReportTime>  \n\t<Content>\u3000 \n\t\t<Paragraph> \n\t\t\t<Sentence> \n\t\t\t\t<Event eid="e1">\n\t\t\t\t\t<Time type="relTime" tid="t1">5月12日14时28分</Time>,\n\t\t\t\t\t<Location lid="l1">四川</Location>发生7.8级\n\t\t\t\t\t<Denoter type="emergency" did="d1">地震</Denoter>。\n\t\t\t\t</Event> \n\t\t\t</Sentence> \n\t\t</Paragraph>  \n\t\t<Paragraph> \n\t\t\t<Sentence> \n\t\t\t\t<Event eid="e2">\n\t\t\t\t\t<Time type="absTime" tid="t2">15时50分</Time>,新民网\n\t\t\t\t\t<Participant sid="s1">记者</Participant>网上\n\t\t\t\t\t<Denoter type="action" did="d2">连线</Denoter>成都网友\n\t\t\t\t\t<Participant oid="o2">姚先生</Participant>\n\t\t\t\t</Event>。\n\t\t\t</Sentence>  \n\t\t\t<Sentence> \n\t\t\t\t<Event eid="e3">\n\t\t\t\t\t<Participant sid="s3,s4,s6,s7,s8,s9,s10">姚先生</Participant>\n\t\t\t\t\t<Time type="relTime" tid="t3">当时</Time>正在\n\t\t\t\t\t<Location lid="l3">成都市武侯区的办公室</Location>\n\t\t\t\t\t<Denoter type="action" did="

然后使用这个方法以后

soup = bs(data,'lxml')#soup把杂乱的数据变得比较规整soup

这里输出的格式,和文本最初的格式是一致的

<?xml version="1.0" encoding="UTF-8"?><html><body><title>成都网友称震感强烈 女同事当即哭泣</title><reporttime type="absTime">2008年05月12日16:15</reporttime><content>          <paragraph><sentence><event eid="e1"><time tid="t1" type="relTime">5月12日14时28分</time><location lid="l1">四川</location>发生7.8级                    <denoter did="d1" type="emergency">地震</denoter></event></sentence></paragraph>
soup.get_text()
Out[7]:'\n成都网友称震感强烈 女同事当即哭泣\n2008年05月12日16:15\n\u3000 \n\t\t\n\n\n5月12日14时28分,\n\t\t\t\t\t四川发生7.8级\n\t\t\t\t\t地震。\n\t\t\t\t\n\n\n\n\n\n15时50分,新民网\n\t\t\t\t\t记者网上\n\t\t\t\t\t连线成都网友\n\t\t\t\t\t姚先生\n\n\t\t\t\n\n\n姚先生\n当时正在\n\t\t\t\t\t成都市武侯区的办公室\n打电话,\n\t\t\t\t\n突然\n\t\t\t\t\t感觉\n\n\n电脑显示器\n晃得很厉害\n\t\t\t\t\n\t\t\t\t便\n\t\t\t\t\t丢下\n电话\n\n\t\t\t\t\n抓起\n手机和\n\t\t\t\t\t钱包\n\n往外\n\t\t\t\t\t跑,\n\t\t\t\t\n手里还\n\t\t\t\t\t拿着\n\t\t\t\t\t无绳电话子机,\n\t\t\t\t\n准备给远在江苏的\n\t\t\t\t\t家人\n打电话。\n\t\t\t\t\n\n\n\n\n\n姚先生\n\n\n坐在他旁边的\n\t\t\t\t\t女同事立刻\n\t\t\t\t\t感觉是在地震,\n\t\t\t\t\n一下子\n\t\t\t\t\t哭了起来。\n\t\t\t\t\n\n\n\n\t\t\t\t\t姚先生\n介绍,\n\t\t\t\t\n成都市很多钢结构的\n\t\t\t\t\t房屋都有明显\n\t\t\t\t\t震感,\n\t\t\t\t\n\n\t\t\t\t\t他和\n\t\t\t\t\t很多市民一样\n\t\t\t\t\t疏散到\n\t\t\t\t\t室外时,\n\t\t\t\t\n随即\n\t\t\t\t\t发现\n\n\n手机信号已经\n\t\t\t\t\t中断\n,据称基站坏了。\n\t\t\t\n\n疏散出来的人群中,\n\t\t\t\t\t大家都在\n\t\t\t\t\t谈论唐山大地震。\n\t\t\t\t\n\n\n\n\n\n姚先生向\n\t\t\t\t\t新民网记者\n\n\n\t\t\t\t\n\t\t\t\t\t一些成都市民\n说,\n\t\t\t\t\n成都的\n\t\t\t\t\t伊藤洋华堂武侯店\n倒塌。\n\t\t\t\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'

我们发现有很多的格式,比较乱,使用字符串替换的方法,把文本中存在的“空格 \n\t \u3000”等字符替换掉,

#\u3000->表示的是:中文(全角)空格 \uxxx   其中xxxx表示一个16进制数字 这种格式是unicode码的写法表示一个char字符result.replace('\n','').replace('\t','').replace('\u3000',''),replace(' ','')

输出结果如下
'成都网友称震感强烈 女同事当即哭泣2008年05月12日16:15 5月12日14时28分,四川发生7.8级地震。15时50分,新民网记者网上连线成都网友姚先生。姚先生当时正在成都市武侯区的办公室打电话,突然感觉电脑显示器晃得很厉害, 便丢下电话、 抓起手机和钱包往外跑,手里还拿着无绳电话子机,准备给远在江苏的家人打电话。姚先生说坐在他旁边的女同事立刻感觉是在地震,一下子哭了起来。据姚先生介绍,成都市很多钢结构的房屋都有明显震感,当他和很多市民一样疏散到室外时,随即发现手机信号已经中断,据称基站坏了。疏散出来的人群中,大家都在谈论唐山大地震。姚先生向新民网记者称, 据一些成都市民说,成都的伊藤洋华堂武侯店倒塌。'
如上:然后我们已经提取到完整的新闻内容,格式比较规整,符合要求,以下就可以继续进行新闻内容的分析。

寻找方法的过程都是痛苦的,做的时候,其实倒腾了挺久,成功之后才是喜悦。

原创粉丝点击