BeautifulSoup успешно пишет html, но find_all ничего не возвращает - PullRequest
0 голосов
/ 04 декабря 2018

Я использую BeautifulSoup для создания и записи HTML-файла.Я могу создать простой HTML, как показано ниже для MWE.Однако все функции поиска ничего не возвращают, поэтому не могут выполнять дальнейшие операции (вставка, добавление).

  1. Что происходит?
  2. Как мне установить стиль для одного из элементов div?(например, div2 и div3 shoudl имеют отображение: ни один, который позже я планирую включить с помощью скрипта)

MWE:

head_soup = BeautifulSoup(open(nbheader_template),"html.parser")
head_soup.contents[0]

base_template = "<!DOCTYPE html><html></html>"
main_soup = BeautifulSoup(base_template,"html.parser")

main_soup.html.append(head_soup)  # add nbconver header

# INSERT THE BODY AS IT IS
# bodies = [body.replace('<body>','').replace('</body>','') for body in bodies]  # no need of body tags
bodies = ['<div>Test div' + str(i+1) + '</div>' for i in range(3)] # for MWE
body_tag = main_soup.new_tag('body')
for each_body in bodies:
    body_tag.append(BeautifulSoup(each_body,'html.parser'))
main_soup.html.insert(1,body_tag)    


with open(output_filename, "w") as file:
    file.write(str(main_soup))

print(main_soup.find_all('head'))
print(main_soup.html.find_all('head'))
print(main_soup.find_all('body'))
print(main_soup.html.find_all('body'))
print(main_soup.find_all('div'))
print(main_soup.html.find_all('div'))

Вывод:
enter image description here

Вывод файла:
enter image description here

Context : Я пытаюсь объединить несколько html-файлов jupyter notebook.После этого обновления мне нужно добавить стили к отдельным элементам div, соответствующим каждому html-файлу (каждому блокноту).

Здесь - это голова nbviewer

1 Ответ

0 голосов
/ 04 декабря 2018

Похоже, что BeautifulSoup не правильно добавляет новые навигационные строки как навигационные строки, а вместо этого - как строки.Это делает так, чтобы их функции поиска не работали на нем, однако, если вы возьмете main_soup.prettify () и вернете его обратно в красивый суп, вы сможете перемещаться по выходным данным, как и ожидалось.

main_soup
<!DOCTYPE html>
<html><body><div>Test div1</div><div>Test div2</div> 
<div>Test div3</div></body></html>
>>> new_soup = BeautifulSoup(main_soup.prettify())
>>> new_soup.body
<body>
<div>
 Test div1
</div><div>
 Test div2
</div><div>
 Test div3
</div>
</body>
>>> new_soup.html.find_all('div')
[<div>
 Test div1
</div>, <div>
 Test div2
</div>, <div>
 Test div3
</div>]

ДляУстановите стиль для одного из div, вы можете перейти к нему, а затем добавить класс для стиля, который вы хотите добавить.Наличие разных стилей для каждого отдельного div становится здоровенным, если вы не хотите использовать этот стиль только в одном месте.Вместо этого я рекомендую использовать css с классами для определения стилей в div, которые вы хотите.

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