Хобрук: Ваш путь к мастерству в программировании

Как разобрать эту html-таблицу с помощью BeautifulSoup

Я хочу проанализировать таблицу ниже html и получить из нее содержимое.

HTML выглядит так..

<body id="up">
        <table style="width:100%">
            <tbody><tr>
            <td align="left">
                <a href="http://example.com/index.php"><font color="#990033">Back</font></a>
            </td>
            <td align="right">
                <a href="http://example.com/feedback.php"><font color="#990033">Feedback</font></a>
            </td>
            </tr>
        </tbody></table>
        <br><br>
        <center>
        <table width="100%" bgcolor="#CCCC99">
            <tbody><tr>
                <td align="center">
                    <font color="#666633">
                        This is what I want <br>
                        19:09, 30 Nov 14 <br>
                        Journey Over<br>Reached SBC at 19:00 <br>
                        <br>
                    </font>
                </td>
            </tr>
        </tbody></table>
    </center>
    <img src="./ga.php">


</body>

Я хочу извлечь содержимое и сохранить его в переменной.

" Это то, что я хочу
19:09, 30 ноя 14
Путешествие окончено
Достигнут SBC в 19:00

" Было бы хорошо, если бы я мог получить значение для каждой строки.

Я пробовал разные способы получения значения, но иногда он печатает null или я получаю какую-то ошибку. Как я могу получить эти строки?

Спасибо, Хвр


Ответы:


1

Вы можете использовать soup.select для тегов td:

In [26]: import bs4 as bs
In [27]: soup = bs.BeautifulSoup(open('data', 'rb').read())

In [28]: [list(td.stripped_strings) for td in soup.select('table tbody tr td')][-1]
Out[28]: 
[u'This is what I want',
 u'19:09, 30 Nov 14',
 u'Journey Over',
 u'Reached SBC at 19:00']
30.11.2014
  • спасибо .. но как я могу использовать строку [list (td.stripped_strings) для td в супе. выберите ('таблица tbody tr td')] [-1] в скрипте Python, чтобы назначить строки отдельным переменным. 30.11.2014
  • Вы можете присвоить все строки одной переменной: data = [...], а затем получить доступ к отдельным строкам с индексацией списка: data[0], data[1] и т. д. Это может быть лучше, чем давать каждой строке отдельное имя переменной, потому что в общем случае вы можете не знать, сколько элементы находятся в списке. Если вы точно знаете, что в списке четыре элемента, вы можете использовать a, b, c, d = [...]. 30.11.2014
  • Я могу добраться до узла, используя приведенное ниже выражение. strong = суп('таблица')[1].findAll('tbody')[0].findAll('tr')[0].findAll('td')[0] Это дает мне вывод ‹td align =center› ‹font color=#666633› Это то, что я хочу ‹br /› 19:09, 30 ноя 14 ‹br /› Путешествие окончено‹br /› Достигнут SBC в 19:00 ‹br /› ‹br /› ‹/font› ‹/td› После этого я не могу разделить строки. 30.11.2014
  • Почему бы не использовать решение, которое я разместил? 30.11.2014
  • Я поменял пи и получил bs4. Но когда я делаю data = [list(td.stripped_strings) for td в soap.select('table tbody tr td')][-1], это выдает ошибку Traceback (последний последний вызов): File ‹stdin›, строка 1, в ‹module› IndexError: индекс списка вне диапазона, что мне делать в этом случае? 01.12.2014
  • Я пробовал с данными = = [список (td.stripped_strings) для td в супе. выберите ('таблица tbody tr td')], а затем попытался распечатать данные ... но это дает []. 01.12.2014
  • Является ли HTML-код, который вы анализируете, точно тем, который вы опубликовали, или это что-то другое? 01.12.2014
  • Да, html был изменен и не имел тега tbody. Поэтому я изменил выражение («таблица tr td»), и теперь я могу использовать его так, как вы предложили. Спасибо, что предложили этот метод. 01.12.2014
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..