Оборачивание тега вокруг строки в HTML с помощью BeautifulSoup - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть файл HTML, аналогичный приведенному ниже

<html>
<head>
<title>Sample</title>
<body>
<p> A new model of Apple iPhone is being launched next week. If the model turns out to be a success then the market value of <i>Apple</i> will reach sky-high </p>
</body>
</html>

В приведенном выше сценарии Apple встречается два раза как часть текста в сценарии, и я отмечаю sh второе вхождение в виде аннотации путем размещения тега вокруг слова, если он еще не заключен в тег.

Например: если второе вхождение как таковое

<i><span class="annotate">Apple</span></i>

Я хотел бы игнорировать вхождение и не вносить изменений в сценарий.

Я пробовал find_all(text="Apple") метод в BeautifulSoup, но он возвращает только, если вся строка внутри тега соответствует заданному тексту. Я также попытался обработать весь сценарий HTML как необработанную строку. Но я не могу проверить, если слово уже заключено в тег span.

1 Ответ

0 голосов
/ 25 февраля 2020

Ниже кода приведен список тегов, которые содержат Apple

from bs4 import BeautifulSoup
import re

soup = BeautifulSoup("<html><head><title>Sample</title><body><p> A new model of Apple iPhone is being launched next week. If the model turns out to be a success then the market value of <i>Apple</i> will reach sky-high </p><i><span class='annotate'>Apple</span></i></body></html>",features="lxml")

for elem in soup(text=re.compile("Apple")):
    print(elem.parent)

Результат:

<p> A new model of Apple iPhone is being launched next week. If the model turns out to be a success then the market value of <i>Apple</i> will reach sky-high </p>
<i>Apple</i>
<span class="annotate">Apple</span>

Теперь вы можете взять каждый тег и проверить, находится ли он в прилагаемом тег или нет, а затем добавьте тег, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...