如何使用BeautifulSoup从HTML“datacell”获取文本

时间:2008-10-21 20:16:14

标签: python html parsing beautifulsoup

我一直试图从HTML文件中删除一些数据。我有逻辑编码来获得正确的单元格。现在我正在努力获得'细胞'的实际内容:

这是我的htm snip

那么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就是一个例子。制作一个cohernet整个文档对我来说很难。

干杯

3 个答案:

答案 0 :(得分:5)

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

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

不依赖于<b>代码的更通用的解决方案是使用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' 对象:

{{1}}

答案 1 :(得分:3)

headerRows[0][10].contents[0].find('b').string

答案 2 :(得分:0)

我有一个基类,我使用一堆方法扩展所有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