Как получить данные из атрибута с разными значениями?
С помощью bs4 нужно получить текст из div с тегом “id”. У тега «id» значение может быть 1, 2 или 3. Нужно получить текст, если он равен 1 или 3
Кусок html кода, который повторяется с разными значениями:
<div class="group" id="1">
<b class="subjectClass">Нач.</b> ОРВ <br/> Не опознано <br/> В процессе
<br/></div>
Пробовал: a = soup.find_all(“div”, id=“1” or “3”)
Ответы (2 шт):
Автор решения: Sergey Derevianko
→ Ссылка
for tag in soup.find_all(class_="group") :
id_value = tag.attrs.get("id")
if id_value and id_value in ('1', '2'):
print(tag.contents[0])
Автор решения: Namerek
→ Ссылка
В вашем варианте никак потому что:
Необязательные открывающие теги
| Тег | Когда можно не писать |
|---|---|
<html> |
Если перед ним не идет <!-- комментарий --> |
<head> |
Если перед ним не идет <!-- комментарий --> |
<body> |
Если body начинается не с <!-- комментария -->, пробела, либо одного из тегов, который может быть и в head |
<tbody> |
Перед <tr>, если перед ним нет незакрытого thead, tfoot или другого tbody |
<colgroup> |
Перед <col>, если перед ним нет незакрытого другого colgroup |
Необязательные закрывающие теги
| Тег | Когда можно не писать |
|---|---|
</html> |
Если после него не идет <!-- комментарий --> |
</head> |
Если после него не идет <!-- комментарий --> или пробел |
</body> |
Если после него не идет <!-- комментарий --> |
</li> |
Перед <li> или </ul>/</ol> |
</dt> |
Перед <dt> или <dd> |
</dd> |
Перед <dt>, <dd> или концом родителя |
</p> |
Перед открывающим тегом любого не-фразового потокового («блочного» по-старому:) элемента, либо закрывающим тегом родительского элемента (если у того не прозрачная модель контента) |
</rt> и </rp> |
Перед <rt>, <rp> или </ruby> |
</optgroup> |
Перед <optgroup> или </select> |
</option> |
Перед <option>, <optgroup>, </optgroup> или </select> |
</colgroup> |
Если после него не идет <!-- комментарий --> или пробел |
</caption> |
Если после него не идет <!-- комментарий --> или пробел |
</thead> |
Перед <tbody> или <tfoot> |
</tbody> |
Перед другим <tbody>, <tfoot> или </table> |
</tfoot> |
Перед </table> |
</tr> |
Перед <tr> или концом родителя |
</td> и </th> |
Перед <td>, <th> или концом родителя |
В связи с вышеизлоенным приведите Ваш html к нормальному виду (тэги закройте)
<div class="group" id="1">
<b class="subjectClass">Нач.</b> ОРВ <br/> Не опознано <br/> В процессе
<br/></div>
<div class="group" id="2">
<b class="subjectClass">Нач.</b> ОРВ <br/> Не опознано <br/> В процессе
<br/></div>
<div class="group" id="3">
<b class="subjectClass">Нач.</b> ОРВ <br/> Не опознано <br/> В процессе
<br/></div>
from bs4 import BeautifulSoup as Soup
text = """
<div class="group" id="1">
<b class="subjectClass">Нач.</b> ОРВ <br/> Не опознано <br/> В процессе
<br/></div>
<div class="group" id="2">
<b class="subjectClass">Нач.</b> ОРВ <br/> Не опознано <br/> В процессе
<br/></div>
<div class="group" id="3">
<b class="subjectClass">Нач.</b> ОРВ <br/> Не опознано <br/> В процессе
<br/></div>
"""
soup = Soup(text, 'html.parser')
print(
soup.find_all(
id=re.compile(r'[13]')
)
)
# Или так
print(
soup.find_all(
id=lambda x: x in ['1', '3']
)
)
[<div class="group" id="1">
<b class="subjectClass">Нач.</b> ОРВ <br/> Не опознано <br/> В процессе
<br/></div>, <div class="group" id="3">
<b class="subjectClass">Нач.</b> ОРВ <br/> Не опознано <br/> В процессе
<br/></div>]