Как добавить тег после ссылки с BeautifulSoup - PullRequest
5 голосов
/ 26 мая 2010

Начиная с ввода HTML, как это:

<p>
<a href="http://www.foo.com">this if foo</a>
<a href="http://www.bar.com">this if bar</a>
</p>

используя BeautifulSoup, я хотел бы изменить этот HTML-код в:

<p>
<a href="http://www.foo.com">this if foo</a><b>OK</b>
<a href="http://www.bar.com">this if bar</a><b>OK</b>
</p>

Возможно ли это сделать с помощью BeautifulSoup?

Что-то вроде:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
for link_tag in soup.findAll('a'):
    link_tag = link_tag + '<b>OK</b>' #This obviously does not work

Ответы [ 2 ]

8 голосов
/ 26 мая 2010

Вы можете использовать BeautifulSoup insert , чтобы добавить элемент в нужное место:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)

for link_tag in soup.findAll('a'):
    link_tag_idx = link_tag.parent.contents.index(link_tag)
    link_tag.parent.insert(link_tag_idx + 1, '<b>OK</b>')

Это работает для приведенного вами примера, хотя я не уверен, что это единственный илисамый эффективный метод.

5 голосов
/ 26 мая 2010

У вас правильная идея. Просто сопоставьте типы и выполните replaceWith.

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
for link_tag in soup.findAll('a'):
    link_tag.replaceWith( link_tag.prettify() + '<b>OK</b>' )
print soup

должно дать вам:

<p>
 <a href="http://www.foo.com">
this if foo
</a>
<b>OK</b>
 <a href="http://www.bar.com">
this if bar
</a>
<b>OK</b>
</p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...