Парсинг на Python НЕ css

Мне необходимо спарсить категории товаров и товары с их URL. на сайте защит нет никакой. Проблема собственно в том, что я не могу структурированно спарсить данные, так как все называется одинаково. Это только часть странички кода...Есть подозрение, что парсить нужно не по css...

<li><a href="/shop/532/Smartphones-Tablets">Smartphones l Tablets</a><span><i class="fa fa-caret-right"></i></span>
                    <ul class="set_bg1">
                      <li class="col1"><a href="ссылка" class="subject">Smartphones</a></li>
                      <li class="col1"><a href=ссылка">Samsung</a></li>
                      <li class="col1"><a href="ссылка">Vivo</a></li>
                      <li class="col1"><a href="ссылка">Realme</a></li>
                      <li class="col1"><a href="ссылка">Oppo</a></li>
                      <li class="col1"><a href="ссылка">Xiaomi</a></li>
                      <li class="col1"><a href="ссылка">Wiko</a></li>
                      <li class="col1"><a href="ссылка">Infinix</a></li>
                      <li class="col1"><a href="ссылка">Tecno</a></li>
                      <li class="col1"><a href="ссылка">Huawei</a></li>
                      <li class="col1"><a href="ссылка">Nokia</a></li>
                      <li class="col1"><a href="ссылка">Lava</a></li>
                      <li class="col2" style="margin-top: -20.6em;"><a href="ссылка" class="subject">Tablets</a></li>
                      <li class="col2"><a href="ссылка">Huawei</a></li>
                      <!--<li class="col2"><a href="ссылка">Acer</a></li>
                      <li class="col2"><a href="ссылка">Asus</a></li>-->
                      <li class="col2"><a href="ссылка">Lenovo</a></li>
                      <li class="col2"><a href="ссылка">Samsung</a></li>
                      <li class="col3" style="margin-top: -6.8em;"><a href="ссылка" class="subject">Accessories</a></li>
                      <li class="col3"><a href="ссылка">Power banks</a></li>
                      <li class="col3"><a href="ссылка">Adapters/Data Cables</a></li>
                      <li class="col3"><a href="ссылка">Micro SD Card</a></li>
                      <li class="col3"><a href="ссылка">USB On The Go (OTG)</a></li>
                      <li class="col3"><a href="ссылка">Others</a></li>
                      <li class="imgback" style="margin-top: -10.2em;"><img src="ссылка" border="0"/></li>
                    </ul>
                  </li>
                  <!--------- 2. computer------------------------------------------------>
                  <li><a href="ссылка">Computers | Notebooks</a><span><i class="fa fa-caret-right"></i></span>
                    <ul class="set_bg1" style="margin-top: -32.7px;">
                      <li class="col1"><a href="ссылка" class="subject">Notebooks</a></li>
                      <li class="col1"><a href="ссылка">Acer </a></li>
                      <li class="col1"><a href="ссылка">Asus</a></li>
                      <li class="col1"><a href=ссылка">Dell</a></li>
                      <li class="col1"><a href="ссылка">HP</a></li>
                      <li class="col1"><a href="ссылка">Lenovo </a></li>
                      <li class="col1"><a href="ссылка">MSI</a></li>
                      <li class="col1"><a href="ссылка">Notebook Case</a></li>
                      <li class="col1"><a href="ссылка" class="subject">Printers</a></li>
                      <li class="col1"><a href="ссылка" class="subject">Toners</a></li>
                      <li class="col1"><a href="ссылка" class="subject">Scanners</a></li>
                      <li class="col1"><a href="ссылка" class="subject">Projector</a></li>
                      <li class="col1"><a href="ссылка"  class="subject">Peripheral/Data Cable</a></li>
                      <li class="col1"><a href="ссылка"  class="subject">Power Supplies/Changers</a></li>
                      <li class="col2" style="margin-top: -23.8em;"><a href="ссылка" class="subject">PC/Cases</a></li>
                      <li class="col2"><a href="ссылка">Acer</a></li>
                      <li class="col2"><a href="ссылка">Asus</a></li>
                      <li class="col2"><a href="ссылка">Dell</a></li>
                      <li class="col2"><a href="ссылка">HP</a></li>
                      <li class="col2"><a href="ссылка">Lenovo</a></li>
                      <li class="col2"><a href="ссылка" class="subject">All-in-one</a></li>
                      <li class="col2"><a href="ссылка">Acer</a></li>
                      <li class="col2"><a href="ссылка">Asus</a></li>
                      <li class="col2"><a href="ссылка">Dell</a></li>
                      <li class="col2"><a href="ссылка">HP</a></li>
                      <li class="col2"><a href="ссылка">Lenovo</a></li>
                      <li class="col2"><a href="ссылка" class="subject">Mini Pc / Stick Pc</a></li>
                      <li class="col2"><a href="ссылка">Asus</a></li>
                      <li class="col2"><a href="ссылка">Intel</a></li>
                      <li class="col3" style="margin-top: -25.5em;"><a href="ссылка" class="subject">Monitors</a></li>
                      <li class="col3"><a href="ссылка">Acer</a></li>
                      <li class="col3"><a href="ссылка">AOC</a></li>
                      <li class="col3"><a href="ссылка">Asus</a></li>
                      <li class="col3"><a href="ссылка">BenQ</a></li>
                      <li class="col3"><a href="ссылка">Dell</a></li>
                      <li class="col3"><a href="ссылка">HP</a></li>
                      <li class="col3"><a href=ссылка">Lenovo</a></li>
                      <li class="col3"><a href="ссылка">LG</a></li>
                      <li class="col3"><a href="ссылка">Philips</a></li>
                      <li class="col3"><a href="ссылка">Samsung</a></li>
                      <li class="col3"><a href="ссылка">MSI</a></li>
                      <li class="imgback" style="margin-top: -18.7em;"><img src="ссылка" border="0"/></li>
                    </ul>
                  </li>

https://www.tohome.com/index.aspx ссылка на страницу


Ответы (1 шт):

Автор решения: Namerek

Для того, чтобы быть уверенным, что все ниженаписанное корректно отработает на полной версии данных нужно иметь хотя-бы ссылку на ресурс, но на представленном обрывке, нижеприведенный код выполняет поставленную задачу

import json
from itertools import takewhile
from typing import Dict, List

from bs4 import BeautifulSoup as Soup
from bs4.element import Tag, PageElement

soup = Soup(open('data.html', encoding='utf-8'), 'html.parser')


def parse_section(elem: Tag):
    for a in takewhile(
            lambda x: x.get('class') != ['subject'],
            elem.find_all_next('a')
    ):
        yield a.get_text(strip=True)


result: Dict[str, Dict[str, list]] = dict()

for item in soup.find_all('i', class_='fa fa-caret-right'):
    section = item.find_next('ul')
    header = item.find_previous('a').string

    section_name = header.get_text(strip=True)

    result.setdefault(section_name, dict())

    for sub in section.find_all('a', class_='subject'):
        subsection_name = sub.get_text(strip=True)
        for i in parse_section(sub):
            result[section_name][subsection_name] = result[section_name].setdefault(subsection_name, []) + [i]

json.dump(
    result,
    open('result.json', 'w', encoding='utf-8'),
    ensure_ascii=False,
    indent=2
)

Содержимое файла result.json

{
  "Smartphones l Tablets": {
    "Smartphones": [
      "Samsung",
      "Vivo",
      "Realme",
      "Oppo",
      "Xiaomi",
      "Wiko",
      "Infinix",
      "Tecno",
      "Huawei",
      "Nokia",
      "Lava"
    ],
    "Tablets": [
      "Huawei",
      "Lenovo",
      "Samsung"
    ],
    "Accessories": [
      "Power banks",
      "Adapters/Data Cables",
      "Micro SD Card",
      "USB On The Go (OTG)",
      "Others",
      "Computers | Notebooks"
    ]
  },
  "Computers | Notebooks": {
    "Notebooks": [
      "Acer",
      "Asus",
      "Dell",
      "HP",
      "Lenovo",
      "MSI",
      "Notebook Case"
    ],
    "PC/Cases": [
      "Acer",
      "Asus",
      "Dell",
      "HP",
      "Lenovo"
    ],
    "All-in-one": [
      "Acer",
      "Asus",
      "Dell",
      "HP",
      "Lenovo"
    ],
    "Mini Pc / Stick Pc": [
      "Asus",
      "Intel"
    ],
    "Monitors": [
      "Acer",
      "AOC",
      "Asus",
      "BenQ",
      "Dell",
      "HP",
      "Lenovo",
      "LG",
      "Philips",
      "Samsung",
      "MSI"
    ]
  }
}
→ Ссылка