0

我正在使用 python 编写爬虫,因为我需要解析 html,所以我导入 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'])

请帮我解决这两个问题:

  1. 为什么类型是dict但错误显示 NoneType ?

  2. 我正在尝试匹配“树”中的某些内容,但它不起作用(该网站是在 GBK 下编码的,编码类型会导致这种问题吗?)。

4

2 回答 2

1
  1. 你得到一个AttributeError,这意味着它tree没有xpath属性,因为它已经成为None,而不是c没有xpath键,KeyError而是 a 。

    显然我们在这里遗漏了一些代码,其中tree设置为“无”。

  2. 您没有打印tree.xpath()调用的结果,因此您的代码(在此处与我们共享)中没有任何内容可以打印m. 据我们所知,这些tree.xpath()电话可能工作正常。

在字里行间阅读并进行一些推测,您将tree.xpath()返回的结果分配给tree,并且您的 XPath 表达式不匹配任何内容并返回 None。下次进入循环时,您现在有None一个 代替ElementTreeNode,因此xpath()调用失败并显示一个AttributeError

于 2012-07-11T07:18:39.147 回答
0

对于您的第一个问题,错误告诉您那tree是无,因为这就是您要读取的xpath属性。但是您打印的是 的类型c,而不是tree

我不明白你在问第二个问题。

于 2012-07-11T07:14:43.437 回答