繁体   English   中英

使用lxml和xpath时出现奇怪的python错误

[英]Weird python error when using lxml and xpath

我正在使用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编码,编码类型是否会导致此类问题?)。

  1. 您将得到AttributeError ,这意味着该tree没有xpath属性,因为它已变为None ,而不是c没有任何xpath键,而应该是KeyError

    显然,我们这里缺少一些代码,其中tree设置为`None。

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

在两行之间阅读并进行一点推测,您正在将tree.xpath()的结果分配回tree ,并且您的XPath表达式不匹配任何内容并返回None。 下次进入循环时,现在将显示None而不是ElementTreeNode ,因此xpath()调用失败,并出现AttributeError

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

我不明白您要问的第二个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM