BeautifulSoup: поиск значения класса для нескольких вложенных элементов - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь использовать BeautifulSoup (Python), чтобы найти значение класса в нескольких вложенных элементах, например:

<li class="Top Class Name" dataid="60">
  <a class="Name of Sub Class 1" href="www.abc.com" dataid="61">
    <div class="Class2" dataid="62">
        <div class="My Class3" dataid="63"><span dataid="64">This is correct</span></div>
          <div class="My Class4" dataid="65">
            <svg class="My Class5 Cur(p)" width="20" style="vertical-align:bottom;" height="26" viewBox="0 0 24 24" dataon="filled-circle"  dataid="67"><path d="The Path" dataid="66"></path>
            </svg>
          </div>
        </div>
    </div>
  </a>
</li>

Используя soup.find_all("li", attrs={"class": "Top Class Name"}), я могу найти верхний класс. Теперь я ищу имя class элемента svg. Поэтому он должен вернуть: My Class5 Cur(p).

Как это можно сделать?

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 19 июня 2020
print(soup.find("li", attrs={"class": "Top Class Name"}).find("svg")['class'])

отпечатки ['My', 'Class5', 'Cur(p)']

1 голос
/ 19 июня 2020

Вы можете использовать CSS селектор .Top.Class.Name svg[class], а затем получить атрибут class.

Обратите внимание, когда у вас есть пробелы в атрибуте class=, тег имеет несколько классов. Итак, class="Top Class Name" означает, что тег относится к классам Top, Class и Name. То же самое для <svg class="My Class5 Cur(p)">.

txt = '''
<li class="Top Class Name" dataid="60">
  <a class="Name of Sub Class 1" href="www.abc.com" dataid="61">
    <div class="Class2" dataid="62">
        <div class="My Class3" dataid="63"><span dataid="64">This is correct</span></div>
          <div class="My Class4" dataid="65">
            <svg class="My Class5 Cur(p)" width="20" style="vertical-align:bottom;" height="26" viewBox="0 0 24 24" dataon="filled-circle"  dataid="67"><path d="The Path" dataid="66"></path>
            </svg>
          </div>
        </div>
    </div>
  </a>
</li>
'''

soup = BeautifulSoup(txt, 'html.parser')

svg = soup.select_one('.Top.Class.Name svg[class]')
print(svg['class'])

Печать:

['My', 'Class5', 'Cur(p)']

Подробнее о CSS селекторах здесь .

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