python - 使用 beautifulsoup 搜索标签内的文本并返回标签中后面的文本

标签 python html beautifulsoup

我正在尝试使用 beautiful soup 解析 python 中的以下 HTML 代码。我希望能够搜索标签内的文本,例如“颜色”并返回下一个标签的文本“Slate,mykonos”,并对下一个标签执行此操作,以便对于给定的文本类别我可以返回它的相应信息。

但是,我发现很难找到正确的代码来执行此操作。

<h2>Details</h2>
<div class="section-inner">
    <div class="_UCu">
        <h3 class="_mEu">General</h3>
        <div class="_JDu">
            <span class="_IDu">Color</span>
            <span class="_KDu">Slate, mykonos</span>
        </div>
    </div>
    <div class="_UCu">
        <h3 class="_mEu">Carrying Case</h3>
        <div class="_JDu">
            <span class="_IDu">Type</span>
            <span class="_KDu">Protective cover</span>
        </div>
        <div class="_JDu">
            <span class="_IDu">Recommended Use</span>
            <span class="_KDu">For cell phone</span>
        </div>
        <div class="_JDu">
            <span class="_IDu">Protection</span>
            <span class="_KDu">Impact protection</span>
        </div>
        <div class="_JDu">
            <span class="_IDu">Cover Type</span>
            <span class="_KDu">Back cover</span>
        </div>
        <div class="_JDu">
            <span class="_IDu">Features</span>
            <span class="_KDu">Camera lens cutout, hard shell, rubberized, port cut-outs, raised edges</span>
        </div>
    </div>

我使用以下代码来检索我的 div 标签

soup.find_all("div", "_JDu")

一旦我检索到标签,我就可以在其中导航,但我找不到正确的代码来查找一个标签内的文本并返回该标签后面的文本。

任何帮助都将非常感激,因为我是Python新手,而且我已经走进了死胡同。

最佳答案

您可以定义一个函数来返回您输入的键的值:

def get_txt(soup, key):
    key_tag = soup.find('span', text=key).parent
    return key_tag.find_all('span')[1].text

color = get_txt(soup, 'Color')
print('Color: ' + color)
features = get_txt(soup, 'Features')
print('Features: ' + features)

输出:

Color: Slate, mykonos
Features: Camera lens cutout, hard shell, rubberized, port cut-outs, raised edges

我希望这就是您正在寻找的内容。

说明:

soup.find('span', text=key)返回 <span>标签 text=key

.parent返回当前<span>的父标签标签。

示例:

何时 key='Color' , soup.find('span', text=key).parent将会返回

<div class="_JDu">
    <span class="_IDu">Color</span>
    <span class="_KDu">Slate, mykonos</span>
</div>

现在我们已将其存储在 key_tag 中。剩下的就是获取第二个 <span> 的文本,这就是 key_tag.find_all('span')[1].text 行确实如此。

关于python - 使用 beautifulsoup 搜索标签内的文本并返回标签中后面的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48200341/

相关文章:

python - Pandas 编写的公式未评估并在 Office 365 中触发错误警告

jQueryUI 可丢弃和可排序 - 无法更改顺序和一些我无法修复的错误

python - 使用 bs4 webscraping 通过内容获取 HTML 类属性

python - 使用 BeautifulSoup 抓取 greatschools.org 返回空列表

python - 查找字符串中最常用的字符的最快方法是什么

python - 根据值是否为 null 创建一个 pandas 数据框列

python - 了解 TensorFlow 检查点加载?

javascript - 防止表单提交重新加载页面

html - 多列列表html

python - 如何去掉抓取数据的p标签