python-3.x - BeautifulSoup 在读取或解析时将内容置于真实元素之外
问题描述
我必须解析最后一个 dd 的内容并将其文本作为其子 p 文本的列表。请参阅下面的屏幕截图: 我使用了以下代码:
with open('strange_dl.html') as f:
soup = BeautifulSoup(f, 'html.parser')
target=soup.dl.find_all('dd')[-1]
p_elements=target.find_all('p')
出乎意料的是,它返回了结果,如下面的屏幕截图所示: 所以你可以看到它并没有返回所有实际的 p 并且还扭曲了第二个 p 元素。
您可以使用 Anaconda 中的 beautifulsoup4 和下面的 html 片段来重现它:
<dl data-test="memory-book-bank-details" class="definition-list padding-default">
<dt class="font-bold color-text">Полное наименование</dt>
<dd>АКБ «ЧУВАШКРЕДИТПРОМБАНК» ПАО</dd>
<dt class="font-bold color-text">Город</dt>
<dd data-test="memory-book-bank-city">Чебоксары</dd>
<dt class="font-bold color-text">Номер лицензии</dt>
<dd data-test="memory-book-bank-license">
1280
|
<a href="http://www.cbr.ru/credit/coinfo.asp?id=970000003"
target="_blank" rel="nofollow">Информация на сайте ЦБ</a>
</dd>
<dt class="font-bold color-text">Причина</dt>
<dd>отзыв лицензии</dd>
<dt class="font-bold color-text">Дата</dt>
<dd>07.11.2019</dd>
<dt class="font-bold color-text">Причина отзыва лицензии</dt>
<dd class="margin-bottom-zero"><p>Банк России принял решение в соответствии с п. п. 6 и 6.1 части первой ст. 20 Федерального закона «О банках и банковской деятельности»2, руководствуясь тем, что Чувашкредитпромбанк:
<p>— допускал нарушения законодательства и нормативных актов Банка России в области противодействия легализации (отмыванию) доходов, полученных преступным путем, и финансированию терроризма. Кредитная организация представляла в уполномоченный орган неполную и некорректную информацию, в том числе по операциям, подлежащим обязательному контролю;
</br>— проводил сомнительные операции, связанные с продажей наличной иностранной валюты;
</br>— допускал нарушения порядка расчета капитала и занижал величину необходимых к формированию резервов на возможные потери. По оценке Банка России, отражение в финансовой отчетности достоверной величины капитала и реальных кредитных рисков, принимаемых кредитной организацией, приводит к значительному (более 35%) снижению размера собственных средств банка. В результате возникают основания для осуществления мер по предупреждению несостоятельности (банкротства) и создается реальная угроза интересам кредиторов и вкладчиков;
</br>— нарушал федеральные законы, регулирующие банковскую деятельность, а также нормативные акты Банка России, в связи с чем регулятор в течение последних 12 месяцев неоднократно применял к нему меры, в том числе вводил ограничения на привлечение денежных средств физических лиц.
<p>На балансе Чувашкредитпромбанка образовался значительный объем корпоративных кредитов низкого качества. Банк России направил в адрес кредитной организации предписание с требованиями об адекватной оценке принимаемых рисков и отражении в отчетности своего реального финансового положения.</dd>
</dl>
解决方案
这是因为您的<p>
标签没有用结束段落标签关闭</p>
。BeautifulSoup 对段落的结束位置感到困惑,并认为它是下一个段落的开始位置。但由于没有下一段,最后一个无法猜到。这就是为什么你会遇到所有这些问题。最简单的解决方案是将段落结束标记放在您的 html 中。
<dl data-test="memory-book-bank-details" class="definition-list padding-default">
<dt class="font-bold color-text">Полное наименование</dt>
<dd>АКБ «ЧУВАШКРЕДИТПРОМБАНК» ПАО</dd>
<dt class="font-bold color-text">Город</dt>
<dd data-test="memory-book-bank-city">Чебоксары</dd>
<dt class="font-bold color-text">Номер лицензии</dt>
<dd data-test="memory-book-bank-license">
1280
|
<a href="http://www.cbr.ru/credit/coinfo.asp?id=970000003"
target="_blank" rel="nofollow">Информация на сайте ЦБ</a>
</dd>
<dt class="font-bold color-text">Причина</dt>
<dd>отзыв лицензии</dd>
<dt class="font-bold color-text">Дата</dt>
<dd>07.11.2019</dd>
<dt class="font-bold color-text">Причина отзыва лицензии</dt>
<dd class="margin-bottom-zero"><p>Банк России принял решение в соответствии с п. п. 6 и 6.1 части первой ст. 20 Федерального закона «О банках и банковской деятельности»2, руководствуясь тем, что Чувашкредитпромбанк:</p>
<p>— допускал нарушения законодательства и нормативных актов Банка России в области противодействия легализации (отмыванию) доходов, полученных преступным путем, и финансированию терроризма. Кредитная организация представляла в уполномоченный орган неполную и некорректную информацию, в том числе по операциям, подлежащим обязательному контролю;
</br>— проводил сомнительные операции, связанные с продажей наличной иностранной валюты;
</br>— допускал нарушения порядка расчета капитала и занижал величину необходимых к формированию резервов на возможные потери. По оценке Банка России, отражение в финансовой отчетности достоверной величины капитала и реальных кредитных рисков, принимаемых кредитной организацией, приводит к значительному (более 35%) снижению размера собственных средств банка. В результате возникают основания для осуществления мер по предупреждению несостоятельности (банкротства) и создается реальная угроза интересам кредиторов и вкладчиков;
</br>— нарушал федеральные законы, регулирующие банковскую деятельность, а также нормативные акты Банка России, в связи с чем регулятор в течение последних 12 месяцев неоднократно применял к нему меры, в том числе вводил ограничения на привлечение денежных средств физических лиц.</p>
<p>На балансе Чувашкредитпромбанка образовался значительный объем корпоративных кредитов низкого качества. Банк России направил в адрес кредитной организации предписание с требованиями об адекватной оценке принимаемых рисков и отражении в отчетности своего реального финансового положения.</p></dd>
</dl>
推荐阅读
- ios - 从底部向内滑动视图并模糊休息
- ansible - 在 Ansible 中浏览 JSON 变量
- c# - DataType(DataType.PhoneNumber) & PhoneAttribute 有什么区别
- html - 如何将 .form-check-inline 按钮与标签分开放置?
- sql - 在 oracle 中转换为特定样式
- mongodb - mongodb按分组字段聚合排序
- ios - 由 userNotificationCenter 而非 Firebase 函数处理的 Firebase 通知
- node.js - Node.js 异步写入串行端口
- javascript - 如何解决 TypeError: angular.element(...).scope(...).selectFileForUpload is not a function
- java - ORA-02049: 超时: 分布式事务在多线程环境中等待锁定