RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1052667
Accepted
Coffee inTime
Coffee inTime
Asked:2020-11-30 23:37:01 +0000 UTC2020-11-30 23:37:01 +0000 UTC 2020-11-30 23:37:01 +0000 UTC

BeautifulSoup4 根据 h3 标签获取内容并删除该标签

  • 772

我在解析时得到这个 HTML 代码:

<div class="row tab-pane" id="tab-description">

  <div class="col-md-6">
        <h3>Описание Makita 4329 Лобзик электрический</h3>
        <ul>
            <li><span>Новый эргономичный дизайн </span></li>
            <li><span>Удобная D-образная рукоятка с резиновыми вставками </span></li>
            <li>Маятниковый ход </li>
        </ul>
    </div>

    <div class="col-md-6">
        <h3>Характеристики Makita 4329 Лобзик электрический</h3>
        <table class="reviewtab table table-striped">
            <tbody>
                <tr>
                    <td>Производитель</td>
                    <td class="odd" itemprop="brand"> Makita </td>
                </tr>
                <tr>
                    <td>Страна происхождения</td>
                    <td class="odd"> Япония </td>
                </tr>
                <tr>
                    <td>Штрих код:</td>
                    <td class="odd">088381083102</td>
                </tr>
            </tbody>
        </table>
    </div>

</div>

它有我需要的 2 个 div,类为“col-md-6”。我需要得到除h3之外的所有这些,这是一个例子:

获取描述

<ul>
    <li><span>Новый эргономичный дизайн </span></li>
    <li><span>Удобная D-образная рукоятка с резиновыми вставками </span></li>
    <li>Маятниковый ход </li>
</ul>

我得到特征

<table class="reviewtab table table-striped">
    <tbody>
        <tr>
            <td>Производитель</td>
            <td class="odd" itemprop="brand"> Makita </td>
        </tr>
        <tr>
            <td>Страна происхождения</td>
            <td class="odd"> Япония </td>
        </tr>
        <tr>
            <td>Штрих код:</td>
            <td class="odd">088381083102</td>
        </tr>
    </tbody>
</table>

以下是我遇到的问题:

1)可能缺少其中一个块,您需要以某种方式“理解”描述在哪里,以及特征在哪里。在这种情况下它会流行什么,在这种情况下应该使用库的哪些方法?

2)我怎样才能删除我不需要的h3s?

python
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Евгений
    2020-12-01T00:49:17Z2020-12-01T00:49:17Z

    <h3>.*</h3>可以使用正则表达式(即<h3> любая последовательность символов </h3>)从代码中提取所有 h3 标头及其内容。

    唯一的问题是,如果“body” div 内还有其他人<h3></h3>,它们也会被排除在外。

    如果“正文”内没有第三级标题 - 只需<h3>.*</h3>通过用于处理正则表达式的库删除正则表达式出现的所有结果(取决于执行解析的语言)

    升级版:

    要区分描述在哪里,特征在哪里,可以先检查div中是否有正则表达式,<h3>Описание.*</h3>或者<h3>Характеристики.*</h3>根据这些正则表达式的存在判断块类型,然后才删除h3,如上所示

    • 2
  2. Best Answer
    nomnoms12
    2020-12-01T01:25:20Z2020-12-01T01:25:20Z

    h3您可以在其中找到标签div并从中提取第一个单词,这将表明该块的用途。extract然后在解析后使用该方法将其删除。

    例子:

    from bs4 import BeautifulSoup
    
    
    def main():
        with open('index.html', encoding='utf-8') as f:
            html = f.read()
        soup = BeautifulSoup(html, 'lxml')
    
        divs = soup.find_all('div', {'class': 'col-md-6'})
        for div in divs:
            h3 = div.find('h3')
            title = h3.get_text().split()[0]
            h3.extract()
    
            print(f'{title}:')
            print(div.prettify())
            print('=' * 73, end='\n\n')
    
    
    if __name__ == '__main__':
        main()
    

    标准输出:

    Описание:
    <div class="col-md-6">
     <ul>
      <li>
       <span>
        Новый эргономичный дизайн
       </span>
      </li>
      <li>
       <span>
        Удобная D-образная рукоятка с резиновыми вставками
       </span>
      </li>
      <li>
       Маятниковый ход
      </li>
     </ul>
    </div>
    
    =========================================================================
    
    Характеристики:
    <div class="col-md-6">
     <table class="reviewtab table table-striped">
      <tbody>
       <tr>
        <td>
         Производитель
        </td>
        <td class="odd" itemprop="brand">
         Makita
        </td>
       </tr>
       <tr>
        <td>
         Страна происхождения
        </td>
        <td class="odd">
         Япония
        </td>
       </tr>
       <tr>
        <td>
         Штрих код:
        </td>
        <td class="odd">
         088381083102
        </td>
       </tr>
      </tbody>
     </table>
    </div>
    
    =========================================================================

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5