Python lxml HTML xpath查询代码不起作用

时间:2014-01-07 15:26:46

标签: python parsing xpath lxml

我正在尝试使用以下代码抓取页面。当我运行代码时,我在titles变量的第一次赋值时遇到错误。错误是:AttributeError:'NonType'对象没有属性'split'。

如果我只是用print(tag.text)替换赋值,它就会按预期工作。另外,对commmands变量的第二次赋值也按预期工作。为什么第一个赋值产生错误?

代码:

import requests
import lxml.html as LH

s = requests.Session()
r = s.get('http://www.rebootuser.com/?page_id=1721')

root = LH.fromstring(r.text)
def getTags():
    commands = []
    titles = []

    for tag in root.xpath('//*/tr/td[@width="54%"]/span'):
        titles += tag.text.split(',')

    for tag in root.xpath('//*/td/span/code'):
        commands += tag.text.split(',')

    zipped = zip(titles, commands)

    for item in zipped:
        print item
getTags()

1 个答案:

答案 0 :(得分:1)

在文档中,一些与xpath //*/tr/td[@width="54%"]/span匹配的标记包含b标记作为子标记而不是文本。

访问此类代码的文本属性返回None

>>> None.split(',')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'split'

使用text_content method代替text属性来正确获取此类代码(及其子代)的文本内容:

for tag in root.xpath('/tr/td[@width="54%"]/span'):
    #titles += tag.text.split(',')
    titles += tag.text_content().split(',')