получить текст подзаголовка на основе элемента в контейнере - PullRequest
0 голосов
/ 23 февраля 2020

Вот где я застрял в этой повторяющейся части кода:

<span class="help-block"></span>
<h5 class="omb_authTitle">prettyname </h5>
<div class="input-group">
    <span class="input-group-addon"><i class="fa fa-check size_listing"></i></span>
    <select class="form-control" id="id_uglyname" name="uglyname">
        <option value=""></option>
        <option selected="" value="Yes">yes</option>
        <option value="No">No</option>
    </select>
</div>

Я использовал Beautifulsoup для создания словаря, вот так:

{'uglyname' : 'Yes'}

Я искал name атрибутов из списка, который я использую select_one, затем получим выбранное значение в раскрывающемся меню.

но мне бы хотелось, чтобы текст в h5 в качестве ключа, например, так:

{'prettyname': 'Yes'}

Как мне go указать это c h5 от этого уникального имени в div?

Спасибо!

1 Ответ

0 голосов
/ 23 февраля 2020

Вы можете использовать псевдокласс :has(). :has() посмотрит в будущее, чтобы узнать, истинен ли селектор внутри него. Здесь мы нацеливаемся на элемент h5, который хотим, и ищем под соседним братом div, ищем прямого select дочернего элемента div и сравниваем атрибут. Обратите внимание, что мы используем относительный селектор в пределах :has(), предшествуя селектору с соседним братским комбинатором +.

from bs4 import BeautifulSoup

html = """
<span class="help-block"></span>
<h5 class="omb_authTitle">prettyname </h5>
<div class="input-group">
    <span class="input-group-addon"><i class="fa fa-check size_listing"></i></span>
    <select class="form-control" id="id_uglyname" name="uglyname">
        <option value=""></option>
        <option selected="" value="Yes">yes</option>
        <option value="No">No</option>
    </select>
</div>
"""

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

print(soup.select_one('h5:has(+ div > select[name=uglyname])'))

Выход

<h5 class="omb_authTitle">prettyname </h5>   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...