2013-07-22 4 views
0

Я хотел получить текст «Некоторых тексты» вложен внутри тегов, как это:BeautifulSoup Python вложенной текст

<tr> 
    <td>CME Globex</td> 
    <td colspan="4"> 
    Some text 
    <a target="_blank"" href="http://...>View Rollover Dates</a> 
    </td> 
</tr> 

Я мог бы сделать что-то вроде .findAll('tr') первых, второго some_tr.findAll('td', colspan=4) и затем some_td.find(text=True). Но есть ли более эффективный способ сделать это? Есть ли способ продолжить перемещение по тегам и, наконец, найти текст?

+0

Вы хотите получить только часть «Некоторые тексты» или все тексты, включая «CME Globex» и «View Rollover Dates»? – jsalonen

+0

Просто «какой-то текст» –

ответ

1

Вы можете использовать XPath выражения с помощью lxml:

html = """<tr> 
    <td>CME Globex</td> 
    <td colspan="4"> 
    Some text 
    <a target="_blank"" href="http://...">View Rollover Dates</a> 
    </td> 
</tr>""" 

import lxml.html 

tree = lxml.html.fromstring(html) 
print tree.xpath('//tr/td[@colspan="4"]/text()') 

не то, что вы после ...

Другой способ, возможно, найти якорь, что ссылки на «View Rollover Даты "и взять предыдущий элемент ...

from bs4 import BeautifulSoup 
soup = BeautifulSoup(html) 
for a in soup.find_all('a', text='View Rollover Dates'): 
    print a.previous_element 
+0

Но что, если «Просмотр дат опроса» не существует для какого-либо другого кода html. Я искал что-то вроде прохождения по тегу 'tr' в' td'. –

+0

@MaxKim Итак, вы просто ищете более короткий способ написать описанную вами логику ... не «по-другому» получить текст ... –

+0

Более эффективный способ поиска текста –

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