我一直试图从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整个文档对我来说很难。
干杯
答案 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