Вставьте HTML в элемент с BeautifulSoup - PullRequest
0 голосов
/ 28 августа 2018

Когда я пытаюсь вставить следующий элемент HTML в элемент

<div class="frontpageclass"><h3 id="feature_title">The Title</h3>... </div>

bs4 заменяет его следующим образом:

<div class="frontpageclass">&lt;h3 id="feature_title"&gt;The Title &lt;/h3&gt;... &lt;div&gt;</div>

Я использую string, и он все еще портит формат.

with open(html_frontpage) as fp:
   soup = BeautifulSoup(fp,"html.parser")

found_data = soup.find(class_= 'front-page__feature-image')
found_data.string = databasedata

Если я пытаюсь использовать found_data.string.replace_with, я получаю ошибку NoneType. found_data относится к типу tag.

похожая проблема, но они используют div, а не класс

1 Ответ

0 голосов
/ 28 августа 2018

Установка элемента .text или .string приводит к кодированию значения в HTML-формате, что является правильным решением. Это гарантирует, что вставляемый текст будет отображаться 1: 1 при отображении документа в браузере.

Если вы хотите вставить фактический HTML, вам нужно вставить новые узлы в дерево.

from bs4 import BeautifulSoup

# always define a file encoding when working with text files
with open(html_frontpage, encoding='utf8') as fp:
    soup = BeautifulSoup(fp, "html.parser")

target = soup.find(class_= 'front-page__feature-image')

# empty out the target element if needed
target.clear()

# create a temporary document from your HTML
content = '<div class="frontpageclass"><h3 id="feature_title">The Title</h3>...</div>'
temp = BeautifulSoup(content)

# the nodes we want to insert are children of the <body> in `temp`
nodes_to_insert = temp.find('body').children

# insert them, in source order
for i, node in enumerate(nodes_to_insert):
    target.insert(i, node)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...