在BeautifulSoup中的<hr>标记后提取文本

2024-09-30 18:35:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从页面中提取数据的脚本。我可以删除大部分内容,但在“hr”标记后会出现一点文本;我不知道如何刮取。HTML代码如下:

<div itemprop="articleBody" class="article-body">
            <p itemprop="immediateRelease" class="immediateRelease">IMMEDIATE RELEASE</p>
            <h1 itemprop="headline">HEADLINE</h1>
            <div class="hidden-lg meta">
                <ul>
                    <li><time pubdate="" datetime="Jan. 23, 2019">Jan. 23, 2019</time></li>
                    <li>News Release</li>

                    <li>Release No: NR-014-19</li>

                </ul>
            </div>

                <hr>

Text Text Text <br>
<br>
Text Text Text <br>
<br>
Text Text Text.<br>
<br>
Text Text Text  <a href="mailto: Text Text Text " class="ApplyClass"> Text Text Text </a>.<br>
<p>&nbsp;</p>
<p>E Text Text Text </p>

            </div>

如何提取hr标记后面的文本,直到div标记的末尾?对于其他元素,我使用了类似于:

^{pr2}$

Tags: text标记文本brdivreleasetimehr
1条回答
网友
1楼 · 发布于 2024-09-30 18:35:04

这有点棘手,似乎是一种解决方法,但是您可以使用bs4元素的next_sibling属性并测试type。但它是有效的:

from urllib.request import urlopen
import bs4
import requests
import json
from selenium import webdriver

html = """<div itemprop="articleBody" class="article-body">
            <p itemprop="immediateRelease" class="immediateRelease">IMMEDIATE RELEASE</p>
            <h1 itemprop="headline">HEADLINE</h1>
            <div class="hidden-lg meta">
                <ul>
                    <li><time pubdate="" datetime="Jan. 23, 2019">Jan. 23, 2019</time></li>
                    <li>News Release</li>

                    <li>Release No: NR-014-19</li>

                </ul>
            </div>

                <hr>

Text Text Text <br>
<br>
Text Text Text <br>
<br>
Text Text Text.<br>
<br>
Text Text Text  <a href="mailto: Text Text Text " class="ApplyClass"> Text Text Text </a>.<br>
<p>&nbsp;</p>
<p>E Text Text Text </p>

            </div>"""

soup = bs4.BeautifulSoup(html,'html.parser')
div = soup.find('div')
text =  ''
el = div.find('hr')
while(el):
    el = el.next_sibling
    if isinstance(el, bs4.element.Tag):
        text += el.get_text()
    elif isinstance(el, bs4.element.NavigableString):
        text += el

print(text)

输出:

^{pr2}$

相关问题 更多 >