2015-12-07 6 views
1

создать суп:Зачистите первый (верхний уровень) тег в BeautifulSoup

from bs4 import BeautifulSoup 
soup = BeautifulSoup("<div><p>My paragraph <a>My link</a></p></div>","html.parser") 

Я хочу, чтобы лишить первый верхний уровень тега, чтобы раскрыть его содержание, независимо от тега:

<p>My paragraph<a>My link</a></p> 

со всеми детьми. Поэтому я не хочу искать и заменять тегом, как soup.find("div"), но делать это позиционно.

Как это можно сделать?

ответ

2

Используйте прилагаемую .unwrap() функции:

from bs4 import BeautifulSoup 
soup = BeautifulSoup("<div><p>My paragraph <a>My link</a></p><p>hello again</p></div>","html.parser") 

soup.contents[0].unwrap() 

print soup 
print len(soup.contents) 

Результат:

<p>My paragraph <a>My link</a></p><p>hello again</p> 
2 
1

Возможно, вы можете использовать его детей?

soup.findChildren()[1] -><p>My paragraph <a>My link</a></p>

soup.findChildren()[0] возвращает сам элемент, который содержит div элемент. Таким образом, индекс 1 будет первым ребенком.

+0

Это опускает другие ребенок под тегом, например, если бы был еще один параграф, параллельный первому. – hosolmaz

+0

Этот код извлекает «первый тег верхнего уровня», который вы задали. Вы имели в виду «теги» вместо «тега»? – AliBZ