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

最后发布: 2008-10-21 20:16:13


问题

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

这是我的htm剪辑

那么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整个文档对我来说很难。

干杯

python html parsing beautifulsoup
回答

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

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

不依赖于<b>标记的更通用的解决方案是使用findAlltext参数,它允许您仅搜索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'


回答

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


回答

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