Конвертировать HTML (неупорядоченный) список во вложенный словарь Python - PullRequest
1 голос
/ 03 июня 2019

Если у меня есть вложенный список HTML (неупорядоченный), который выглядит следующим образом:

<<ul style="">
  <li class="jstree-last jstree-open" id="wfo-7000000004">
    <ins class="jstree-icon"> </ins>
    <a class="" href="taxon/wfo-7000000004">
      <ins class="jstree-icon"> </ins>
      Acoraceae
    </a>
    <ul style="">
      <li class="jstree-last jstree-open" id="wfo-4000000350">
        <ins class="jstree-icon"> </ins>
        <a class="" href="taxon/wfo-4000000350">
          <ins class="jstree-icon"> </ins>
          Acorus
        </a>
        <ul style="">
          <li class="jstree-open" id="wfo-0000350733">
            <ins class="jstree-icon"> </ins>
            <a class="" href="taxon/wfo-0000350733">
              <ins class="jstree-icon"> </ins>
              Acorus calamus
            </a>
            <ul style="">
              <li class="jstree-leaf" id="wfo-0000350841">
                <ins class="jstree-icon"> </ins>
                <a class="" href="taxon/wfo-0000350841">
                  <ins class="jstree-icon"> </ins>
                  Acorus calamus var. americanus
                </a>
              </li>
              <li class="jstree-last jstree-leaf" id="wfo-0000350949">
                <ins class="jstree-icon"> </ins>
                <a class="" href="taxon/wfo-0000350949">
                  <ins class="jstree-icon"> </ins>
                  Acorus calamus var. angustatus
                </a>
              </li>
            </ul>
          </li>
          <li class="jstree-last jstree-leaf" id="wfo-0000352676">
            <ins class="jstree-icon"> </ins>
            <a class="" href="taxon/wfo-0000352676">
              <ins class="jstree-icon"> </ins>
              Acorus gramineus
            </a>
          </li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

Как мне сформировать из Python вложенный словарь? Например:

{
  Acorales: {
    Acoraceae: {
      Acorus: {
        Acoruscalamus: [
          Acoruscalamusvar.americanus,
          Acoruscalamusvar.angustatus
        ],
        Acorusgramineus
      }
    }
  }
}

Я предполагаю, что библиотеки типа Beautiful Soup и HTML Parser имеют средства для этого (с циклами for в python), но я не смог этого понять. Спасибо за любую помощь!

Я пробовал так:

def create_dic(soup):
    return {li.a.get_text().replace("\xa0", ""): create_dic(li)
            for ul in soup('ul', recursive=False)
            for li in ul('li', recursive=False)}

Тем не менее, выходные данные выглядят так (где Acorus calamus var. Americanus и Acorus calamus var. Angustatus должны быть в списке, а Acorus gramineus не словарь):

{'Acorales': {'Acoraceae': {'Acorus': {'Acorus calamus': {'Acorus calamus var. americanus': {},
                                                          'Acorus calamus var. angustatus': {}},
                                       'Acorus gramineus': {}}}}}
...