TypeError : 'NoneType' object not callable Python with BeautifulSoup XML
我有以下XML文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <user-login-permission>true</user-login-permission> <total-matched-record-number>15000</total-matched-record-number> <total-returned-record-number>15000</total-returned-record-number> username</active-user-name> realm</authentication-realm> <user-roles>Role</user-roles> <user-sign-in-time>date</user-sign-in-time> <events>0</events> text</agent-type> <login-node>node</login-node> </active-user-record> |
有很多记录我正在尝试从标记中获取值,并使用以下代码将其保存到其他文本文件中:
1 2 3 4 5 6 7 | soup = BeautifulSoup(open("path/to/xmlfile"), features="xml") with open('path/to/outputfile', 'a') as f: for i in range(len(soup.findall('active-user-name'))): f.write ('%s\t%s\t%s\t%s ' % (soup.findall('active-user-name')[i].text, soup.findall('authentication-realm')[i].text, soup.findall('user-roles')[i].text, soup.findall('login-node')[i].text)) |
我得到错误类型错误:"nonetype"对象不可调用python with beautifulsoup xml for line:for i in range(len(soup.findall('active-user-name')):
知道是什么引起的吗?
谢谢!
有许多问题需要解决,第一个问题是您提供的XML文件不是有效的XML—需要根元素。
尝试以下XML形式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <root> <user-login-permission>true</user-login-permission> <total-matched-record-number>15000</total-matched-record-number> <total-returned-record-number>15000</total-returned-record-number> username</active-user-name> realm</authentication-realm> <user-roles>Role</user-roles> <user-sign-in-time>date</user-sign-in-time> <events>0</events> text</agent-type> <login-node>node</login-node> </active-user-record> </active-user-records> </root> |
现在到Python身上。首先,没有
接下来,我建议您修改代码,这样您就不会经常使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from bs4 import BeautifulSoup xml_file = open('./path_to_file.xml', 'r') soup = BeautifulSoup(xml_file,"xml") with open('./path_to_output_f.txt', 'a') as f: for s in soup.findAll('active-user-record'): username = s.find('active-user-name').text auth = s.find('authentication-realm').text role = s.find('user-roles').text node = s.find('login-node').text f.write("{}\t{}\t{}\t{} ".format(username, auth, role, node)) |
希望这有帮助。如果您需要进一步的帮助,请通知我!
解决方法很简单:不要使用
为什么?因为根本没有
不过,我同意,错误消息令人困惑。
希望有帮助。
这个问题的修复方法是将beautifulsoup实例强制为类型字符串。您可以执行以下操作:https://groups.google.com/forum/!主题/comp.lang.python/ymrea29fmfi
您使用以下Python:来自python手册
STR([对象])
返回一个字符串,该字符串包含对象。对于字符串,这将返回字符串本身。差异with repr(object)是str(object)并不总是试图返回eval()可接受的字符串;其目标是返回可打印字符串。如果没有给定参数,则返回空字符串,