2014-01-07 2 views
1

Я пытаюсь очистить страницу, используя следующий код. Когда я запускаю код, я получаю сообщение об ошибке при первом присваивании переменной титров. Ошибка: AttributeError: объект «NonType» не имеет атрибута «split».Python lxml HTML-код запроса xpath не работает

Если я просто заменил назначение печатью (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

В документе, некоторые теги, которые соответствуют 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(',') 
+0

спасибо человеку, это сразу же решить этот вопрос! – h33th3n

Смежные вопросы