Я промочил пальцы на ноге с BeautifulSoup и зацикливался на том, чтобы почерпнуть какую-то конкретную информацию. HTML выглядит следующим образом, например:
<div class="row">
::before
<div class="course-short clearfix">
::before
<div class="course-meta col-sm-12">
<dl>
<dt>Language:</dt>
<dd>English</dd>
<dt>Author:</dt>
<dd>John Doe</dd>
<dt>Institution:</dt>
<dd>American University</dd>
</dl>
</div>
...
<div class="row">
::before
<div class="course-short clearfix">
::before
<div class="course-meta col-sm-12">
<dl>
<dt>Language:</dt>
<dd>English</dd>
<dt>Author:</dt>
<dd>John Doe, Jr.</dd>
<dt>Institution:</dt>
<dd>Another University</dd>
</dl>
</div>
...
Каждая страница имеет около 10 <div class="row">
тегов, каждый с одинаковым шаблоном <dt>
и <dd>
(например, Язык, Автор, Учреждение).
Я пытаюсь очистить информацию <dd>American University</dd>
, чтобы в конечном итоге создать цикл, чтобы я мог получить эту информацию, специфичную для каждого тега <div class="row">
.
Мне удалось сделать следующее:
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.oeconsortium.org/courses/search/?search=statistics")
bsObj = BeautifulSoup(html.read(), "html.parser")
institutions = [x.text.strip() for x in bsObj.find_all('div', 'course-meta col-sm-12', 'dd')]
Но это только дает мне следующий беспорядок для каждого соответствующего <div class="row">
:
Language:\n\n\t\t\t\t\t\t\t\t\t\t\tEnglish\t\t\t\t\t\t\t\t\t\nAuthor:\nJohn Doe\nInstitution:\nAmerican University\n
Language:\n\n\t\t\t\t\t\t\t\t\t\t\tEnglish\t\t\t\t\t\t\t\t\t\nAuthor:\nJohn Doe, Jr.\nInstitution:\nAnother University\n
...
(я знаю, как .strip()
; это не проблема.)
Я не могу понять, как нацелиться на эту третью <dd></dd>
для каждого соответствующего <div class="row">
. Я чувствую, что это может быть возможно также путем нацеливания на тег <dt>Institution:</dt>
(в каждом соответствующем случае это «Учреждение»), но я не могу понять это.
Любая помощь приветствуется. Я пытаюсь создать LOOP, чтобы я мог перебрать, скажем, десять <div class="row">
экземпляров и просто извлечь информацию, относящуюся к тегу "Institution" <dd>
.
Спасибо!