Python BeautifulSoup - извлекать текст и значения атрибутов - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть немного HTML:

<td class="course-section-type"><span class="text-capitalize">lecture (5)</span></td>
<td class="course-section-meeting">
   <table class="no-borders" width="100%">
      <tbody>
         <tr>
            <td width="23%">MWF</td>
            <td width="55%">11:30 AM - 12:20 PM</td>
            <td width="22%"><span><a href="http://myurl.com" target="_blank">MGH</a> <span class="sr-only">building room</span> 389</span></td>
         </tr>
      </tbody>
   </table>
</td>
<td class="course-section-sln">00000</td>    

Я бы хотел извлечь значения атрибутов класса "top" и сопоставить их со списком текста более низкого уровня. Для приведенного выше HTML это будет выглядеть примерно так:

data = {
    "course-section-type": ["lecture (5)"],
    "course-section-meeting": ["MWF", "11:30 AM - 12:20 PM", "MGH", "building room", "389"],
    "course-section-sln": ["00000"]
}    

Я знаю, что могу извлечь весь текст с помощью soup.findAll('td').text, но я не знаю, как пройти по дереву html или как извлечь значение атрибута тега. Как бы я поступил так?

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

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

d = {}
for tag in line.findAll('td'):
    if tag.get("class") and "course" in tag.get("class")[0]:
        d[tag.get("class")[0]] = [text.strip() for text in tag.findAll(text=True)]
>>> d
{"course-section-type": ["lecture (5)"], 
"course-section-meeting": ["MWF", "11:30 AM - 12:20 PM", "MGH", "building room", 
"389"], "course-section-sln": ["00000"]}    
0 голосов
/ 18 ноября 2018

решение состоит в извлечении всего в этом шаблоне,

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

course-section-тип - внешняя таблица первая <td> текст

встреча-курс-раздел - внутренняя таблица все текст

секция-курс-sln - внешняя таблица третья <td> текст

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...