2016-11-28 4 views
0

Я пытаюсь извлечь некоторую информацию, используя красивый суп в python, используя python webscrapping. Вот раздел.Ошибка объекта nonetype не имеет текста атрибута, в то время как сбрасывается через красивый суп 4 python

<div class="result-value" data-reactid=".0.0.3.0.0.3.$0.1.1"> 
<span data-reactid=".0.0.3.0.0.3.$0.1.1.0">751</span> 
<span class="result-value-unit" data-reactid=".0.0.3.0.0.3.$0.1.1.1">KB</span> 
</div 


Snap: https://www.dropbox.com/s/d349tb3f22o0wyf/4.png?dl=0 

код я использую этот

Sizeofweb="" 
try: 
    Sizeofweb= soup.find('span', {'data-reactid': ".0.0.3.0.0.3.$0.1.1.0"}).text 
    print Sizeofweb 
except StandardError as e: 
    converted_date="Error was {0}".format(e) 
    print converted_date 

Error

nonetype object has no attribute text 

Я попытался это, но не работало. Где я ошибаюсь?

ответ

1

Этот код работает для меня -

from bs4 import BeautifulSoup 

html_str = """ 
<div class="result-value" data-reactid=".0.0.3.0.0.3.$0.1.1"> 
<span data-reactid=".0.0.3.0.0.3.$0.1.1.0">751</span> 
<span class="result-value-unit" data-reactid=".0.0.3.0.0.3.$0.1.1.1">KB</span> 
</div> 
""" 

soup = BeautifulSoup(html_str,"lxml") 

Sizeofweb = soup.find('span', {'data-reactid': ".0.0.3.0.0.3.$0.1.1.0"}).text 

print Sizeofweb 

Выход

751 

Одна вещь, которую я заметил, это последний DIV тег близко отсутствует тесная скобку - ">"

Незнайки как вы это сделали, но это работает для меня ...

+1

Возможно, это связано с тем, что вы использовали парсер «lxml». Разный парсер будет обрабатывать структуру HTML по-разному, и один парсер может обрабатывать отсутствующие закрывающие теги лучше, чем другие. Документация BeautifulSoup подчеркивает различия между разными парсерами - https://www.crummy.com/software/BeautifulSoup/bs4/doc/#specifying-the-parser-to-use. – TheF1rstPancake

+1

хорошая точка @ Jalepeno112, вставляющая приличную строку html, всегда намного более разумна, хотя ... не знала этого, спасибо! –