Страницы

Поиск по вопросам

понедельник, 30 марта 2020 г.

BeautifulSoup: построчная обработка таблицы

#python #python_3x #парсер #beautiful_soup #bs4


Помогите пожалуйста разобраться, пытаюсь обработать выгрузку информации о Сisco телефоне
в формате HTML. Необходимые данные лежат в table[2]



    Cisco
Systems, Inc.


Device information

Cisco IP Phone

Device information
Streaming statistics
   Stream 1
...
Service modeEnterprise
Service domain
App load IDrootfs8845_65.12-1-1-12
При попытке вытащить параметры аппарата из таблицы, не отображаются строки param = soup.findChildren("table"[2]) print(param) В выводе получается список без какой либо привязки к строкам, все параметры подряд: .... Service mode, Enterprise, Service domain, , Service state, Idle, .... Однако если сделать поиск по тегу "DIV" param = soup.findChildren("div") print(param) На выводе будет строка необходимых данных, но ее нельзя прогнать через цикл что бы создать словарь, где параметры из одной строки будут ключом - значением (пример "Service mode" : "Enterprise") Подскажите, как правильно обработать таблицу, чтобы создать словарь из параметров в table[2]


Ответы

Ответ 1



Попробуйте так: from bs4 import BeautifulSoup # ... table = root.select_one('table:nth-of-type(3)') # Или так: table = soup.select('table')[2] name_by_value = dict() for tr in table.select('tr'): tds = tr.select('td') name, value = tds[0].text.strip(), tds[2].text.strip() name_by_value[name] = value print(name_by_value) # {'Service mode': 'Enterprise', 'Service domain': '', 'App load ID': 'rootfs8845_65.12-1-1-12'} PS. Заметил, что нужные значения ячеек находятся исключительно в , а значит можно немного конкретизировать поиск: ... for tr in table.select('tr'): tds = [x.text.strip() for x in tr.select('td > b')] name, value = tds[0], tds[1] name_by_value[name] = value ... А если элементов всегда ожидается два, то воспользоваться распаковкой: ... for tr in table.select('tr'): name, value = [x.text.strip() for x in tr.select('td > b')] name_by_value[name] = value ...

Комментариев нет:

Отправить комментарий