BeautifulSoup: basta entrar em uma tag, não importa quantas tags anexas existam

Estou tentando raspar todo o html interno do<p> elementos em uma página da web usando o BeautifulSoup. Existem tags internas, mas não me importo, só quero obter o texto interno.

Por exemplo, para:

<p>Red</p>
<p><i>Blue</i></p>
<p>Yellow</p>
<p>Light <b>green</b></p>

Como posso extrair:

Red
Blue
Yellow
Light green

Nem.string nem.contents[0] faz o que eu preciso. Nem faz.extract(), porque não quero especificar as tags internas com antecedência. Quero lidar com as que possam ocorrer.

Existe um tipo de método 'apenas obtenha o HTML visível' no BeautifulSoup?

----ATUALIZAR------

Por conselho, tentando:

soup = BeautifulSoup(open("test.html"))
p_tags = soup.findAll('p',text=True)
for i, p_tag in enumerate(p_tags): 
    print str(i) + p_tag

Mas isso não ajuda - ele imprime:

0Red
1

2Blue
3

4Yellow
5

6Light 
7green
8

questionAnswers(4)

yourAnswerToTheQuestion