2012-07-11 55 views
0

我使用Python寫一個履帶式的,因爲我需要解析HTML,所以我導入LXML但它出來一個奇怪的錯誤時:奇怪的蟒蛇錯誤使用LXML和XPath

<type 'dict'> 
{'xpath': '//ul[@id="i-detail"]/li[1]', 'name': u'\u6807\u9898'} 

<type 'dict'> 
{'xpath': '//ul[@id="i-detail"]/li[1]', 'name': u'\u6807\u9898'} 

<type 'dict'> 
{'xpath': '//ul[@id="i-detail"]/li[1]', 'name': u'\u6807\u9898'} 
Exception in thread Thread-3: 
Traceback (most recent call last): 
    File  "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line  522, in __bootstrap_inner 
    self.run() 
    File  "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line  477, in run 
    self.__target(*self.__args, **self.__kwargs) 
    File "fetcher.py", line 78, in run 
    self.extractContent(html) 
    File "fetcher.py", line 151, in extractContent 
    m = tree.xpath(c['xpath']) 
AttributeError: 'NoneType' object has no attribute 'xpath' 

<type 'dict'> 
{'xpath': '//ul[@id="i-detail"]/li[1]', 'name': u'\u6807\u9898'} 

這裏是一片我的代碼:

for c in self.contents: 
    print type(c) 
    print c 
    m = tree.xpath(c['xpath']) 

請幫我這兩個問題:

  1. 爲什麼類型爲dict但錯誤說NoneType?我想要匹配「樹」中的某些東西,但它不起作用(網站編碼在GBK下,編碼類型是否會導致這種問題?)。

回答

1
  1. 你得到一個AttributeError,這意味着tree沒有xpath屬性,因爲它已成爲None,而不是c沒有xpath關鍵,那將會是一種KeyError代替。

    很明顯,我們在這裏錯過了一些代碼,其中tree被設置爲「無」。

  2. 您不打印您的tree.xpath()調用的結果,因此您的代碼中沒有任何內容(與我們共享)打印m。對於我們所知的全部,tree.xpath()調用可能正常工作。

字裏行間和猜測一點,你要分配的tree.xpath()結果回tree,和你的XPath表達式沒有匹配,返回無。下次進入循環時,您現在有None而不是ElementTreeNode,因此xpath()呼叫失敗,並顯示AttributeError

0

關於第一個問題,錯誤是告訴你,tree是沒有,因爲那是你想讀的xpath屬性是什麼。但是,您正在打印c的類型,而不是tree

我不明白你在問你的第二個問題。