Динамическое указание тегов при использовании replaceWith в Beautiful Soup - PullRequest
0 голосов
/ 21 мая 2009

Ранее я задал этот вопрос и получил этот пример кода BeautifulSoup, который после некоторых локальных консультаций я решил использовать.

>>> from BeautifulSoup import BeautifulStoneSoup
>>> html = """
... <config>
... <links>
... <link name="Link1" id="1">
...  <encapsulation>
...   <mode>ipsec</mode>
...  </encapsulation>
... </link>
... <link name="Link2" id="2">
...  <encapsulation>
...   <mode>udp</mode>
...  </encapsulation>
... </link>
... </links>
... </config>
... """
>>> soup = BeautifulStoneSoup(html)
>>> soup.find('link', id=1)
<link name="Link1" id="1">
<encapsulation>
<mode>ipsec</mode>
</encapsulation>
</link>
>>> soup.find('link', id=1).mode.contents[0].replaceWith('whatever')
>>> soup.find('link', id=1)
<link name="Link1" id="1">
<encapsulation>
<mode>whatever</mode>
</encapsulation>
</link>

Единственная проблема с этим состоит в том, что в примере есть жестко заданное значение тега (в данном случае «режим»), и мне нужно иметь возможность указать любой тег в указанном теге «ссылка». Простая замена переменных, похоже, не работает.

Ответы [ 2 ]

2 голосов
/ 21 мая 2009

Попробуйте getattr(soup.find('link', id=1), sometag), где теперь у вас есть жестко заданный тег в soup.find('link', id=1).mode - getattr - это способ Python для получения атрибута, имя которого в конце концов хранится как строковая переменная!

0 голосов
/ 21 мая 2009

Не нужно использовать getattr:

sometag = 'mode'
result = soup.find('link', id=1).find(sometag)
print result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...