【问题标题】:How do you get the text from an HTML 'datacell' using BeautifulSoup如何使用 BeautifulSoup 从 HTML 数据单元中获取文本
【发布时间】:2010-09-18 09:49:41
【问题描述】:

我一直在尝试从 HTML 文件中删除一些数据。我有逻辑编码以获得正确的单元格。现在我正在努力获取“单元格”的实际内容:

这是我的 HTML sn-p:

headerRows[0][10].contents

  [<font size="+0"><font face="serif" size="1"><b>Apples Produced</b><font size="3">       
  </font></font></font>]

请注意,这是来自 Python [] 的列表项。

我需要 Apples Produced 的价值,但无法获得。

任何建议将不胜感激

对一本解释这一点的好书的建议将赢得我永远的感激


感谢您的回答。然而,没有更普遍的答案。如果我的单元格没有粗体属性会怎样

说是:

 [<font size="+0"><font face="serif" size="1"><I>Apples Produced</I><font size="3">       
  </font></font></font>]

苹果生产

我正在努力学习阅读/理解文档,您的回复会有所帮助

我非常感谢您的帮助。这些答案最好的一点是,从它们中概括起来要容易得多,然后我可以从 BeautifulSoup 文档中做到这一点。我在 Fortran 时代学会了编程,现在我正在学习 python,我对它的力量感到惊讶——BeautifulSoup 就是一个例子。制作一个连贯的整个文档对我来说很难。

干杯

【问题讨论】:

    标签: python html parsing beautifulsoup


    【解决方案1】:

    BeautifulSoup documentation 应该涵盖您需要的所有内容 - 在这种情况下,您似乎想使用 findNext

    headerRows[0][10].findNext('b').string
    

    不依赖&lt;b&gt; 标记的更通用的解决方案是使用text 参数到findAll,它允许您仅搜索NavigableString 对象:

    >>> s = BeautifulSoup(u'<p>Test 1 <span>More</span> Test 2</p>')
    >>> u''.join([s.string for s in s.findAll(text=True)])
    u'Test 1 More Test 2'
    

    【讨论】:

      【解决方案2】:

      我有一个基类,我用一堆方法扩展了所有 Beautiful Soup 类,这些方法可以帮助我获取一组我不一定希望依赖其结构的元素中的文本。其中一种方法如下:

        def clean(self, val):
          if type(val) is not StringType: val = str(val)
          val = re.sub(r'<.*?>', '', s) #remove tags
          val = re.sub("\s+" , " ", val) #collapse internal whitespace
          return val.strip() #remove leading & trailing whitespace
      

      【讨论】:

        【解决方案3】:
        headerRows[0][10].contents[0].find('b').string
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-24
          • 2019-01-02
          • 2015-01-03
          • 1970-01-01
          • 2021-05-15
          • 1970-01-01
          • 1970-01-01
          • 2017-11-03
          相关资源
          最近更新 更多