我一直在找解析HTML表格与Python/BeautifulSoup ...BeautifulSoup标签去除
这是我在Python编码什么的第一次尝试,所以它可能不是最有效的。
我在这里找到了另一个帖子(大部分作品很棒),但我遇到了一些问题。
我运行的代码是在这里:
def strip_tags(html, invalid_tags):
bs2 = BeautifulSoup(str(html))
for tag in bs2.findAll(True):
if tag.name in invalid_tags:
s = ""
for c in tag.contents:
if not isinstance(c, NavigableString):
c = strip_tags(unicode(c), invalid_tags)
s += unicode(c)
tag.replaceWith(s)
return bs2
invalid_tags = ['td','b']
for row in bs.findAll('tr'):
col = row.findAll('td')
for index,item in enumerate(col):
t = item.findAll('a')
for ta in t:
ta.replaceWithChildren()
col[index] == item
for item in col:
print(strip_tags(item.string,invalid_tags).string
的原始数据表(HTML)看起来是这样的:
<td align="left">11/10</td>
<td>N ARMY</td>
<td>-7.5</td>
<td>NL</td>
<td><b>76-65</b></td>
<td><span style="color:green">W</span></td>
<td><span style="color:green">W</span></td>
<td></td>
<td class="cell4">50.0%</td>
<td class="cell4">76.9%</td>
<td class="cell4">37.5%</td>
<td class="cell5">37.1%</td>
<td class="cell5">90.0%</td>
<td class="cell5">29.4%</td>
当我运行strip_tags的功能,它适用于所有标签第二行除外......“None”作为输出返回。
如果任何人都可以提供任何有关发生这种情况的见解,我将不胜感激。
编辑:哇谢谢大家的快速回复。总之,这里是当我运行的代码会发生什么:
11/10 None -7.5 NL 76-65 W W None 50.0% 76.9% 37.5% 37.1% 90.0% 29.4%
问题在于围绕第二线,它会返回,而不是“N军队”“无”。所以,是的,理想情况下,我只想在标签中找到的文字。
是你在找什么输出呢? BeautifulSoup也有'.stripped_strings'迭代,这使得大多数这不必要,如果你想要的只是表中的文本。 – 2013-04-10 19:27:30
您的缩进看起来不对;对于index,枚举项(col):'和'for col in:'块应该*可能*被缩进为前面'for'循环的一部分。 – 2013-04-10 19:29:16
你提供了输入html,但我很困惑你想从它输出什么。你能发布它*应该*返回的内容吗? – 2013-04-10 19:30:13