2014-01-27 39 views
0

我寫一個腳本解析這樣的HTML文檔:兩個功能不在同一個腳本的工作,但單獨工作

<html> 
    <head></head> 
    <body> 
    <p> 
     <dfn>text</dfn>sometext<i>othertext</i></p> 
    <p> .....................................</p> 
    <p> .....................................</p> 
    </body> 
</html> 

我已經嘗試了XML的解析不同的封裝停在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

如果你先調用'f2',它會給你正確的輸出,然後給'f1'一個錯誤嗎? –

回答

1

難道你需要測試,如果x.textNone

+0

謝謝,它現在可行! – user3241376

1

仔細查看堆棧跟蹤,尤其在該行:

File "/home/elaine/Desktop/try2.py", line 20, ***in f1*** 

這就告訴你,這是在錯誤發生的f1功能。如果你註釋掉f2的電話,你會發現你仍然得到同樣的錯誤。它看起來像f1正在正確完成,因爲它給你正確的輸出,但是必須有一些它在最後遇到的事情導致它打破。

我會建議把print(bu)放在行bu = x.text之後,看看bu正在做什麼值導致正則表達式中斷。這可能是buNone,雖然它也有可能是一些其他的價值。

如果您需要更多幫助,我會建議發佈您正在嘗試解析的html文件。

相關問題