Python - BS4 - Извлечение нескольких значений из класса - PullRequest
0 голосов
/ 04 января 2019

при разборе веб-страницы с помощью bs4 я пытаюсь извлечь несколько значений и сохранить их в словаре для дальнейшего использования.

Модель

            <div class="model-dropdown-block">
                <select name="modelpid">
                    <option value="empty">Select Model</option>

                    <option value="MODEL1_530"
                            data-maxavailable="0.0"
                            data-maxorderqty="10"
                           data-status="NOT_AVAILABLE">                                
                           Jet Fighter       </option>


                        <option value="MODEL2_540"
                            data-maxavailable="0.0"
                            data-maxorderqty="10"
                            data-status="NOT_AVAILABLE">                                
                            Jet Fighter2     </option>

учитывая вышеизложенное, я хотел бы извлечь:

  1. соответствующий текст (Jet Fighter)
  2. значение опции (MODEL1_530)
  3. состояние данных (НЕ ДОСТУПНО)

и вставьте их в пару ключ / значение словаря с несколькими значениями, чтобы получить результат Jet Fighter: Model1530, Недоступно

Мне нужны данные для последующего использования, но я готов предложить более эффективный способ их хранения для последующего извлечения.

soup = BeautifulSoup(content, "html.parser")
allmodels = soup.findAll('div', {'class':'model-dropdown-block'})

for model in allmodels: 
    for modelvar in model.findAll('option'): 
        print(sizevar['value'])

так что, как и ожидалось, это фиксирует все значения параметров. Мне нужно иметь возможность пропустить первый параметр, который всегда пуст, а затем создать словарь, как описано.

Я не уверен, как мне нужно отредактировать цикл for, чтобы получить дополнительную информацию. Я попробовал:

for model in allmodels: 
    for modelvar in model.findAll('option'): 
        print(sizevar['value'],[data-status])

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

первый пост здесь, так что спасибо заранее!

1 Ответ

0 голосов
/ 05 января 2019

Не уверен, что это сработает, потому что у него был только маленький фрагмент HTML. Но удалось получить результат, который вы искали.

import bs4


html = '''<div class="model-dropdown-block">
                <select name="modelpid">
                    <option value="empty">Select Model</option>

                    <option value="MODEL1_530"
                            data-maxavailable="0.0"
                            data-maxorderqty="10"
                           data-status="NOT_AVAILABLE">                                
                           Jet Fighter       </option>


                        <option value="MODEL2_540"
                            data-maxavailable="0.0"
                            data-maxorderqty="10"
                            data-status="NOT_AVAILABLE">                                
                            Jet Fighter2     </option>'''




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


allmodels = soup.findAll('div', {'class':'model-dropdown-block'})[0]
models = allmodels.find_all('option')


model_dict = {}
for model in models: 

    model_key = model.text.strip()
    option_value = model.get('value')
    data_status = model.get('data-status')

    model_dict[model_key] = [option_value, data_status]

Выход:

print (model_dict)
{'Select Model': ['empty', None], 'Jet Fighter': ['MODEL1_530', 'NOT_AVAILABLE'], 'Jet Fighter2': ['MODEL2_540', 'NOT_AVAILABLE']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...