我正在编写一个用于解析此类html文档的脚本:
<html>
<head></head>
<body>
<p>
<dfn>text</dfn>sometext<i>othertext</i></p>
<p> .....................................</p>
<p> .....................................</p>
</body>
</html>
我尝试过不同的xml-parsing包,并在lxml上停止。
我需要首先使用正则表达式迭代dfn
标记的内容,然后迭代i
标记的内容。所以,我为每个任务编写了我的2个函数。它们分开工作,但不能在同一个脚本中一起工作。他们在这里:
tree = etree.parse(html-file)
def f1():
for x in tree.getiterator('dfn'):
bu = x.text
if re.findall(r'\s[A-Z]{1,2}$', bu):
print(bu)
def f2():
for x in tree.getiterator('i'):
mu = x.text
if re.findall(r'\W\s[A-Z]$', mu):
print(mu)
def main():
f1()
f2()
if __name__ == "__main__":
main()
当我运行脚本时,我得到 f1 的正确输出,然后是以下错误消息:
Traceback (most recent call last):
File "/home/elaine/Desktop/try2.py", line 47, in <module>
main()
File "/home/elaine/Desktop/try2.py", line 33, in main
f1()
File "/home/elaine/Desktop/try2.py", line 20, in f1
if re.findall(r'\s[A-Z]{1,2}$', bu):
File "/usr/lib/python2.7/re.py", line 177, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
答案 0 :(得分:1)
您是否需要测试x.text
是否不是None
?
答案 1 :(得分:1)
仔细查看堆栈跟踪,特别是这一行:
File "/home/elaine/Desktop/try2.py", line 20, ***in f1***
这告诉您正在f1
函数中发生错误。如果您将对f2
的调用注释掉,您应该会发现仍然会遇到相同的错误。它看起来像f1
正确完成,因为它为您提供了正确的输出,但最终必然会遇到导致它断开的事情。
我建议将print(bu)
放在第bu = x.text
行之后,以查看导致正则表达式中断的值bu
。 bu
可能是None
,但它也可能带有其他价值。
如果您需要更多帮助,我建议您发布您要解析的html文件。