2012-04-14 2 views
6

Из этого источника HTML:Использование BeautifulSoup для извлечения текста перед первым ребенком тег

<div class="category_link"> 
    Category: 
    <a href="/category/personal">Personal</a> 
</div> 

Я хочу, чтобы извлечь текст Category:

Вот мои попытки использовать Python/BeautifulSoup (с выходом в качестве комментария - после #)

parsed = BeautifulSoup(sample_html) 
parsed_div = parsed.findAll('div')[0] 
parsed_div.firstText() # <a href="/category/personal">Personal</a> 
parsed_div.first() # <a href="/category/personal">Personal</a> 
parsed_div.findAll()[0] # <a href="/category/personal">Personal</a> 

Я ожидаю, что «текстовый узел» будет доступен в качестве первого ребенка. Любые предложения о том, как я могу это решить?

+1

'parsed_div.contents [0]' – Avaris

ответ

11

Я довольно уверен, что следующий должен делать то, что вы хотите

parsed.find('a').previousSibling # or something like that 

Это будет возвращать NavigableString экземпляр, который в значительной степени то же самое вещь как unicode например, но вы можете вызвать unicode на что получить объект unicode .

Я посмотрю, смогу ли я проверить это и сообщить об этом.

EDIT: Я только что подтвердил, что он работает:

>>> from BeautifulSoup import BeautifulSoup 
>>> soup = BeautifulSoup('<div class=a>Category: <a href="/">a link</a></div>') 
>>> soup.find('a') 
<a href="/">a link</a> 
>>> soup.find('a').previousSibling 
u'Category: ' 
>>> 
+0

Awesome! Работали как шарм –

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