python-xml/html解析问题
我需要将给定文件解析为字符串列表, 给定的文件样式如下所示:python-xml/html解析问题,python,xml,parsing,lxml,Python,Xml,Parsing,Lxml,我需要将给定文件解析为字符串列表, 给定的文件样式如下所示: <DOC> <DOCNUM> NUMBER </DOCNUM> <DOCTYPE> TYPE </DOCTYPE> <HEADER> &SOMETHING </HEADER> <BODY> <HEADLINE> SOME TEXT </HEADLINE> TEXT TEXT TEXT <TEXT&g
<DOC>
<DOCNUM> NUMBER </DOCNUM>
<DOCTYPE> TYPE </DOCTYPE>
<HEADER>
&SOMETHING
</HEADER>
<BODY>
<HEADLINE>
SOME TEXT
</HEADLINE>
TEXT
TEXT
TEXT
<TEXT>
<P>
INPUT TEXT1
</P>
<P>
INPUT TEXT2
</P>
.
.
.
</TEXT>
</BODY>
</DOC>
数
类型
&某物
一些文本
正文
正文
正文
输入文本1
输入文本2
.
.
.
我需要列出p标记外观中的所有TEXTi实例。
我试着用lxmlxml解析器来做这件事,但是因为&在xml格式中有些东西是不可接受的,所以它不起作用。。。
我尝试使用html解析器,但我没有弄清楚如何使其工作
有人知道有什么好办法让我得到我需要的名单吗 解析它似乎没有问题
>>> from bs4 import BeautifulSoup as BS
>>> from itertools import chain
>>> doc = BS('''<DOC>
<DOCNUM> NUMBER </DOCNUM>
<DOCTYPE> TYPE </DOCTYPE>
<HEADER>
&SOMETHING
</HEADER>
<BODY>
<HEADLINE>
SOME TEXT
</HEADLINE>
TEXT
TEXT
TEXT
<TEXT>
<P>
INPUT TEXT1
</P>
<P>
INPUT TEXT2
</P>
.
.
.
</TEXT>
</BODY>
</DOC>''')
>>> list(chain(*[list(p.stripped_strings) for p in doc.find_all('p')]))
[u'INPUT TEXT1', u'INPUT TEXT2']
>>从bs4导入BeautifulSoup作为BS
>>>来自itertools进口链
>>>doc=BS(“”)
数
类型
&某物
一些文本
正文
正文
正文
输入文本1
输入文本2
.
.
.
''')
>>>列表(链(*[文档中p的列表(p.stripped_字符串)查找所有('p')]))
[u'INPUT TEXT1',u'INPUT TEXT2']
您可以使用模块re
导入正则表达式函数:
import re
strr="<DOC> <DOCNUM> NUMBER </DOCNUM> <DOCTYPE> TYPE </DOCTYPE> <HEADER> &SOMETHING </HEADER> <BODY> <HEADLINE> SOME TEXT </HEADLINE> TEXT TEXT TEXT <TEXT> <P> INPUT TEXT1 </P> <P> INPUT TEXT2 </P> . . . </TEXT> </BODY> </DOC>"
arr = re.findall(r'<P>.*?</P>', strr)
print arr
重新导入
strr=“数字类型&一些文本输入文本1
输入文本2
.”
arr=re.findall(r'*?
',strr)
打印arr
如果您没有嵌套的
标记(但是,任何其他标记都可以位于标记中)您可以使用recover=True
选项忽略
中的&
:
从lxml导入etree
doc=etree.parse(xmlish_文件,parser=etree.XMLParser(recover=True))
打印([doc.iter('p')中p的p.text]
#->['\nINPUT TEXT1\n','\nINPUT TEXT2\n']
或者可以将其解析为html。如果您对
中的所有文本感兴趣;您可以使用.text\u content()
而不是.text
:
从lxml导入html
doc=html.parse(xmlish_文件)
打印([p.text_content(),用于文档iter('p')中的p)
#->['\nINPUT TEXT1\n','\nINPUT TEXT2\n']