Блокнот IPython: конвертировать блокнот HTML в ipynb

Я преобразовал записную книжку IPython в формат HTML и впоследствии потерял исходный файл ipynb.

Есть ли простой способ создать оригинальный файл блокнота из преобразованного файла HTML?

3 ответа

Решение

Недавно я использовал BeautifulSoup и JSON для преобразования html-блокнота в ipynb. хитрость заключается в том, чтобы посмотреть на схему JSON ноутбука и подражать ей. Код выбирает только ячейки входного кода и ячейки уценки

вот мой код

from bs4 import BeautifulSoup
import json
import urllib.request
url = 'http://nbviewer.jupyter.org/url/jakevdp.github.com/downloads/notebooks/XKCD_plots.ipynb'
response = urllib.request.urlopen(url)
#  for local html file
# response = open("/Users/note/jupyter/notebook.html")
text = response.read()

soup = BeautifulSoup(text, 'lxml')
# see some of the html
print(soup.div)
dictionary = {'nbformat': 4, 'nbformat_minor': 1, 'cells': [], 'metadata': {}}
for d in soup.findAll("div"):
    if 'class' in d.attrs.keys():
        for clas in d.attrs["class"]:
            if clas in ["text_cell_render", "input_area"]:
                # code cell
                if clas == "input_area":
                    cell = {}
                    cell['metadata'] = {}
                    cell['outputs'] = []
                    cell['source'] = [d.get_text()]
                    cell['execution_count'] = None
                    cell['cell_type'] = 'code'
                    dictionary['cells'].append(cell)

                else:
                    cell = {}
                    cell['metadata'] = {}

                    cell['source'] = [d.decode_contents()]
                    cell['cell_type'] = 'markdown'
                    dictionary['cells'].append(cell)
open('notebook.ipynb', 'w').write(json.dumps(dictionary))

вот часть print(soup.div) выход

div class="container">
<div class="navbar-header">
<button class="navbar-toggle collapsed" data-target=".navbar-collapse" data-toggle="collapse" type="button">
<span class="sr-only">Toggle navigation</span>
<i class="fa fa-bars"></i>
</button>
<a class="navbar-brand" href="/">
<img src="/static/img/nav_logo.svg?v=479cefe8d932fb14a67b93911b97d70f" width="159"/>
</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li>
<a class="active" href="http://jupyter.org">JUPYTER</a>
</li>
<li>
<a href="/faq" title="FAQ">
<span>FAQ</span>

Снимок экрана с полученным файлом ipynb, загруженным на мой локальный jupyter и после запуска всех ячеек

Обратите внимание, что лучший ответ может потребовать некоторой модификации тегов, чтобы он работал в конце 2022 года и в дальнейшем.

Я добавляю это как ответ, чтобы выделить комментарии, которые я оставил под хорошим ответом, за который проголосовали.
Обратите внимание, что текущая версия потрясающей версии, получившей большое количество голосов, вероятно, не будет работать, поскольку теги HTML, сигнализирующие о различных ячейках, изменились.Если у вас действительно старая версия HTML, она может сработать. Однако у большинства из вас будет более новый HTML, и вам нужны новые теги в коде, чтобы различать ячейки.

См. мои комментарии ниже к сообщению, получившему большое количество голосов (вам нужно будет нажать на опцию «Показать больше комментариев» внизу, чтобы отобразить все комментарии), чтобы найти ссылку, где вы можете запустить ее в активном сеансе Juptyer справа. в вашем браузере, без необходимости авторизации, через сервис MyBinder с обновленной версией кода с текущими используемыми тегами. (Прямой источник см. в первой ячейке кода . Различия в тегах влияют на несколько строк исходного кода.

Вот хитрость: сохраните html-файл как файл .txt, а затем откройте его в редакторе кода. Затем переименуйте расширение файла в .ipynb. Это должно помочь.

Другие вопросы по тегам