BeautifulSoup, словарь из таблицы HTML

Я пытаюсь очистить данные таблицы с веб-сайта.

Вот простая примерная таблица:

t = '<html><table>' +\ '<tr><td class="label"> a </td> <td> 1 </td></tr>' +\ '<tr><td class="label"> b </td> <td> 2 </td></tr>' +\ '<tr><td class="label"> c </td> <td> 3 </td></tr>' +\ '<tr><td class="label"> d </td> <td> 4 </td></tr>' +\ '</table></html>' 

Желаемый результат синтаксического анализа – {' a ': ' 1 ', ' b ': ' 2 ', ' c ': ' 3 ', ' d ' : ' 4' }


Это моя самая близкая попытка:

 for tr in s.findAll('tr'): k, v = BeautifulSoup(str(tr)).findAll('td') d[str(k)] = str(v) 

Результат:

 {'<td class="label"> a </td>': '<td> 1 </td>', '<td class="label"> d </td>': '<td> 4 </td>', '<td class="label"> b </td>': '<td> 2 </td>', '<td class="label"> c </td>': '<td> 3 </td>'} 

Я знаю text=True параметр findAll() но я не получаю ожидаемых результатов, когда я его использую.

Я использую python 2.6 и BeautifulSoup3.

3 Solutions collect form web for “BeautifulSoup, словарь из таблицы HTML”

Попробуй это:

 from BeautifulSoup import BeautifulSoup, Comment t = '<html><table>' +\ '<tr><td class="label"> a </td> <td> 1 </td></tr>' +\ '<tr><td class="label"> b </td> <td> 2 </td></tr>' +\ '<tr><td class="label"> c </td> <td> 3 </td></tr>' +\ '<tr><td class="label"> d </td> <td> 4 </td></tr>' +\ '</table></html>' bs = BeautifulSoup(t) results = {} for row in bs.findAll('tr'): aux = row.findAll('td') results[aux[0].string] = aux[1].string print results 

Вы можете следовать тому же подходу, что и mvillaress , но немного улучшите его, используя List Comprehensions :

 from BeautifulSoup import BeautifulSoup t = '<html><table>' +\ '<tr><td class="label"> a </td> <td> 1 </td></tr>' +\ '<tr><td class="label"> b </td> <td> 2 </td></tr>' +\ '<tr><td class="label"> c </td> <td> 3 </td></tr>' +\ '<tr><td class="label"> d </td> <td> 4 </td></tr>' +\ '</table></html>' bs = BeautifulSoup(t) tds = [row.findAll('td') for row in bs.findAll('tr')] results = { td[0].string: td[1].string for td in tds } print results 

Если вы очищаете таблицу, есть явные «thead» и «tbody», такие как:

 <table> <thead> <tr> <th>Total</th> <th>Finished</th> <th>Unfinished</th> </tr> </thead> <tbody> <tr> <td>63</td> <td>33</td> <td>2</td> </tr> <tr> <td>69</td> <td>29</td> <td>3</td> </tr> <tr> <td>57</td> <td>28</td> <td>1</td> </tr> </tbody> </table> 

Вы можете использовать следующее:

 headers = [header.text_content() for header in table.cssselect("thead tr th")] results = [{headers[i]: cell.text_content() for i, cell in enumerate(row.cssselect("td"))} for row in table.cssselect("tbody tr")] 

Это даст:

 [ {"Total": "63", "Finished": "33", "Unfinished": "2"}, {"Total": "69", "Finished": "29", "Unfinished": "3"}, {"Total": "57", "Finished": "28", "Unfinished": "1"} ] 

PS Это использует lxml.html. Если вы используете BeautifulSoup, замените «.text_content ()» на «.string» и «.cssselect» на «.findAll».

  • Устранение неполадок AttributeError: объект ResultSet не имеет атрибута 'findAll'
  • Как анализировать HTML с помощью символов, отличных от ASCII, с помощью BeautifulSoup?
  • Как я могу сделать веб-скребок пересекаю несколько страниц результатов поиска с помощью Beautiful Soup?
  • Класс PyQt не работает для второго использования
  • Beautifulsoup findall застревает без обработки
  • Извлечение данных в таблице с помощью BeautifulSoup
  • Различия между .text и .get_text ()
  • BeautifulSoup, получить список тегов и получить значения атрибута
  •  
    Interesting Posts for Van-Lav

    Проверьте, нормально или асинхронно, если функция или метод

    im пытается получить прокси с использованием python regex из веб-страницы

    Python, Bokeh: Как назначить дополнительную ось оси y в строковый символ в потоковом графике?

    Python Selenium Webdriver – аутентификация прокси

    Первый раз попытка потоковой передачи с использованием concurrent.futures-Почему я не получаю никакого вывода?

    Сортировка по ключу словаря внутри словаря в Python

    Кто-нибудь знает какую-либо услугу API расписания поездов?

    Пропустить пароль для runas из Python

    Как создать пункт меню Django ModelForm, выбранный по умолчанию?

    Получение информации о процессоре в Python

    Таблица базы данных Python Sqlite3 не обновляется

    Отключение Django CSRF для представлений, которые не всегда имеют ответ

    Numpy: Как проверить, содержит ли массив определенные числа?

    Выполнение бесконечных циклов с использованием потоков в python

    Python: динамически обновлять график после ввода пользователем

    Python - лучший язык программирования в мире.