【问题标题】:extracting text from mangled html tag with <br> separating the elements使用 <br> 分隔元素从损坏的 html 标记中提取文本
【发布时间】:2014-07-24 23:35:09
【问题描述】:

所以我有这个 html 片段:

<p class="tbtx">


                              MWF



<br></br>

TH
</p>

这似乎完全被破坏了。我需要提取数据,即 ['MWF', 'TH']。

我能想到的唯一解决方案是替换html中的所有换行符和空格,然后在
处拆分并重建html结构,然后提取.text,但这有点荒谬。

对此有任何适当的解决方案吗?

【问题讨论】:

    标签: python html web-scraping html-parsing beautifulsoup


    【解决方案1】:

    .stripped_strings 是您要查找的内容 - 它会删除不必要的空格并返回字符串。

    演示:

    from bs4 import BeautifulSoup
    
    data = """<p class="tbtx">
    
    
                                  MWF
    
    
    
    <br></br>
    
    TH
    </p>"""
    
    soup = BeautifulSoup(data)
    print list(soup.stripped_strings)  # prints [u'MWF', u'TH']
    

    【讨论】:

    • 人们应该注意到它不适用于所有版本的 BeautifulSoup。只有在我安装 BeautifulSoup4 后才为我工作
    【解决方案2】:

    您可以使用filter 和 BeautifulSoup 来完成此操作,从 HTML sn-p 中提取文本。

    from bs4 import BeautifulSoup
    
    html = """<p class="tbtx">
    
    
                                  MWF
    
    
    
    <br></br>
    
    TH
    </p>"""
    
    print filter(None,BeautifulSoup(html).get_text().strip().split("\n"))
    

    输出:

    [u'MWF', u'TH']
    

    【讨论】:

      【解决方案3】:

      我建议使用正则表达式提取文本

      例如,如果您的 html 如您所说:

      "
      <p class="tbtx">
      
      
                                    MWF
      
      
      
      <br></br>
      
      TH
      </p>
      "
      

      我们可以看到所需的文本(“MWF”、“TH”)被空白字符包围。

      因此,正则表达式("\s\w+\s") 读取“查找任何被空白字符包围的单词字符集”并识别所需的文本。

      这是创建正则表达式的备忘单:http://regexlib.com/CheatSheet.aspx?AspxAutoDetectCookieSupport=1

      您可以在此处测试所需文本的正则表达式:http://regexpal.com/

      【讨论】:

        猜你喜欢
        • 2019-08-07
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        • 2021-02-10
        • 2015-10-11
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        相关资源
        最近更新 更多