0

HTMLを解析する必要があるため、pythonを使用してクローラーを作成しているため、lxmlをインポートしますが、奇妙なエラーが発生します。

<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'])

次の 2 つの質問について教えてください。

  1. タイプはなぜですかdict、エラーは NoneType と表示されますか?

  2. 「ツリー」内の何かを一致させようとしていますが、うまくいきません (Web サイトは GBK でエンコードされています。エンコードの種類がこの種の問題を引き起こす可能性はありますか?)。

4

2 に答える 2

1
  1. を取得しています。これは、になったときに属性がないAttributeErrorことを意味します。キーがないのではなく、代わりにになります。treexpathNonecxpathKeyError

    明らかに、ここでtreeはいくつかのコードが欠落しています。

  2. 呼び出しの結果をtree.xpath()出力していないため、コードには (ここで共有されているように) を出力するものは何もありませんmtree.xpath()通話は、私たちが知っている限りでは正常に機能している可能性があります。

行間を読んで少し推測すると、tree.xpath()backの結果を に代入していますがtree、XPath 式は何にも一致せず、None を返しました。次回ループに入ると、None代わりに があるElementTreeNodeため、xpath()呼び出しは . で失敗しますAttributeError

于 2012-07-11T07:18:39.147 に答える
0

最初の質問では、属性treeを読み取ろうとしているのは None であるため、エラーはそれが None であることを示しています。しかし、あなたはではなくxpathのタイプを印刷しています。ctree

2番目の質問であなたが何を求めているのか理解できません。

于 2012-07-11T07:14:43.437 に答える