[英]BeautifulSoup4 not recognizing xml tag
我正在使用BeautifulSoup4(帶有lxml解析器)來解析看起來像這樣的xml:
<?xml version="1.0" encoding="UTF-8" ?>
<data>
<metadata id="8735180" name="Dauphin Island" lat="30.2500" lon="-88.0750"/>
<observations>
<wl t="2013-12-14 00:00" v="0.725" s="0.059" f="0,0,0,0" q="v" />
<wl t="2013-12-14 00:06" v="0.771" s="0.066" f="0,0,0,0" q="v" />
<wl t="2013-12-14 00:12" v="0.764" s="0.085" f="0,0,0,0" q="v" />
....等等
python代碼如下所示:
obs_soup = BeautifulSoup(urllib2.urlopen('http://tidesandcurrents.noaa.gov/api/datagetter?product=water_level&application=NOS.COOPS.TAC.WL&begin_date=20131214&end_date=20131216&datum=MSL&station=8735180&time_zone=GMT&units=english&interval=&format=xml),'lxml')
for l in obs_soup.findall('wl'):
obs.append(l['v'])
我不斷收到錯誤:
for l in obs_soup.findall('wl'):
TypeError: 'NoneType' object is not callable
我在這里嘗試了解決方案(除了沒有尋找“ html”,而是尋找了“數據”),但這沒有用。 有什么建議么?
這里有兩個問題。
首先, BeautifulSoup
沒有findall
這樣的方法。 更改為:
for l in obs_soup.find_all('wl'):
obs.append(l['v'])
……它會起作用。
那么,為什么會收到這個TypeError: 'NoneType' object is not callable
而是更常見的AttributeError
? 由於BeautifulSoup的神奇查找,使您可以將obs_soup.wl
作為查找<wl>
的快捷方式的同一件事,也可以使obs_soup.findall
作為查找<findall>
的快捷方式的同一件事。 因為沒有<findall>
節點,所以它返回None
。 然后嘗試將None
對象作為函數調用,這當然是胡說八道。
另外,如果您實際上按照您的要求從此處復制並粘貼了副本,則不會有此問題。 該代碼使用帶有大寫find_all
“ A”的findAll
,這是find_all
的已棄用同義詞。 (當然,您不應使用不贊成使用的同義詞。)
其次,您明確要求使用lxml的HTML解析器,而不是其XML解析器。 不要那樣做 見文檔 :
BeautifulSoup(markup, ["lxml", "xml"])
由於您沒有給我們完整的XML文檔,因此我不知道這是否會影響您,或者您是否會碰巧。 但是,當您正確地做正確的事很容易時,您不應該依靠偶然來獲得幸運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.