使用Python BeautifulSoup解析HTML表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Python BeautifulSoup解析HTML表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2337字,纯文字阅读大概需要4分钟。
内容图文
![使用Python BeautifulSoup解析HTML表](/upload/InfoBanner/zyjiaocheng/826/374dbbd90cb749fc9c0e280f7101f641.jpg)
我试图使用BeautifulSoup来解析我上传到http://pastie.org/8070879的html表,以便将三列(0到735,0.50到1.0和0.5到0.0)作为列表.为了解释原因,我希望整数0-735为键,十进制数为值.
通过阅读关于SO的许多其他帖子,我提出了以下内容,这些内容并未接近创建我想要的列表.它只是显示表格中的文字,如http://i1285.photobucket.com/albums/a592/TheNexulo/output_zps20c5afb8.png所示
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("fide.html"))
table = soup.find('table')
rows = table.findAll('tr')
for tr in rows:
cols = tr.findAll('td')
for td in cols:
text = ''.join(td.find(text=True))
print text + "|",
print
我是Python和BeautifulSoup的新手,所以请温柔地对待我!谢谢
解决方法:
像BeautifulSoup这样的HTML解析器假定你想要的是一个反映输入HTML结构的对象模型.但有时候(就像在这种情况下),这种模式不仅仅是帮助. Pyparsing包含一些HTML解析功能,这些功能比仅使用原始正则表达式更强大,但是以其他类似的方式工作,让您定义感兴趣的HTML片段,而忽略其余部分.这是一个解析您发布的HTML源代码的解析器:
from pyparsing import makeHTMLTags,withAttribute,Suppress,Regex,Group
""" looking for this recurring pattern:
<td valign="top" bgcolor="#FFFFCC">00-03</td>
<td valign="top">.50</td>
<td valign="top">.50</td>
and want a dict with keys 0, 1, 2, and 3 all with values (.50,.50)
"""
td,tdend = makeHTMLTags("td")
keytd = td.copy().setParseAction(withAttribute(bgcolor="#FFFFCC"))
td,tdend,keytd = map(Suppress,(td,tdend,keytd))
realnum = Regex(r'1?\.\d+').setParseAction(lambda t:float(t[0]))
integer = Regex(r'\d{1,3}').setParseAction(lambda t:int(t[0]))
DASH = Suppress('-')
# build up an expression matching the HTML bits above
entryExpr = (keytd + integer("start") + DASH + integer("end") + tdend +
Group(2*(td + realnum + tdend))("vals"))
这个解析器不仅可以选出匹配的三元组,还可以提取起始端整数和实数对(并且在解析时也已经从字符串转换为整数或浮点数).
看看表格,我猜你实际上想要一个像700这样的密钥的查找,然后返回这对值(0.99,0.01),因为700在620-735的范围内.这段代码搜索源HTML文本,迭代匹配的条目并将键值对插入到dict查找中:
# search the input HTML for matches to the entryExpr expression, and build up lookup dict
lookup = {}
for entry in entryExpr.searchString(sourcehtml):
for i in range(entry.start, entry.end+1):
lookup[i] = tuple(entry.vals)
现在尝试一些查找:
# print out some test values
for test in (0,20,100,700):
print (test, lookup[test])
打印:
0 (0.5, 0.5)
20 (0.53, 0.47)
100 (0.64, 0.36)
700 (0.99, 0.01)
内容总结
以上是互联网集市为您收集整理的使用Python BeautifulSoup解析HTML表全部内容,希望文章能够帮你解决使用Python BeautifulSoup解析HTML表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。