如何使用BeautifulSoup获取HTML中的'datacell'文本
我一直在尝试从HTML文件中提取一些数据。我已经写好了逻辑来获取正确的单元格。现在我在获取“单元格”的实际内容时遇到了困难:
这是我的HTML片段:
headerRows[0][10].contents
[<font size="+0"><font face="serif" size="1"><b>Apples Produced</b><font size="3">
</font></font></font>]
注意,这里是Python中的一个列表项 []。
我需要的值是“苹果产量”,但我就是无法获取到它。
任何建议都非常感谢
如果能推荐一本解释这个的好书,我会非常感激
谢谢你的回答。不过,难道没有更通用的答案吗?如果我的单元格没有加粗属性会发生什么呢?
比如它是:
[<font size="+0"><font face="serif" size="1"><I>Apples Produced</I><font size="3">
</font></font></font>]
苹果产量
我正在努力学习如何阅读和理解文档,你的回答会对我有帮助
我非常感激这个帮助。这些回答的最好之处在于,从中总结出通用的知识要比我从BeautifulSoup文档中学到的容易多了。我是在Fortran时代学编程的,现在我在学习Python,真是惊叹于它的强大——BeautifulSoup就是一个例子。把文档整合成一个连贯的整体对我来说很困难。
谢谢
3 个回答
我有一个基础类,我在这个基础上扩展了所有的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
BeautifulSoup 的文档应该包含你需要的所有信息。在这个情况下,看起来你想使用 findNext
方法:
headerRows[0][10].findNext('b').string
还有一种更通用的解决方案,它不依赖于 <b>
标签。你可以使用 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'
这段代码是一个示例,展示了如何在程序中使用某些功能。它可能涉及到一些基本的编程概念,比如变量、循环或者条件判断。
如果你是编程新手,理解这些代码的结构和逻辑是很重要的。通常,代码会按照一定的顺序执行,每一行都有它的作用。你可以把它想象成一个食谱,每一步都需要按照顺序来完成,才能做出美味的菜肴。
在学习编程时,遇到代码块是很常见的事情。你可以尝试逐行分析,看看每一部分是做什么的,这样会帮助你更好地理解整个程序的运行方式。
记住,编程就像学习一种新的语言,刚开始可能会觉得有点难,但只要多练习,就会慢慢变得熟悉。
headerRows[0][10].contents[0].find('b').string