簡體   English   中英

BeautifulSoup4無法識別xml標簽

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM