我是 stackoverflow 的新手,这是我的第一个问题。
我正在用 Python 编写脚本来解析 HTML 页面。 页面看起来像这样:
<TABLE style="border: 1px solid black">
<TR>
<TD colspan="2"><span id="text1" style="color: white">DATA1</span></TD>
</TR>
<TR>
<TD class="rowLabel" valign="top">Data name</TD>
<TD valign="top" width="100"><span id="somename1" class="alsoname">DATA2</span></TD>
</TR>
<TR>
<TD class="rowLabel" valign="top">Data name</TD>
<TD valign="top" width="100"><span id="somename2" class="alsoname">DATA3</span></TD>
</TR>
<TR>
<TD class="rowLabel" valign="top">Data name</TD>
<TD valign="top" width="100"><span id="somename3" class="alsoname">DATA4</span></TD>
</TR>
<TR>
<TD class="rowLabel" valign="top">Data name</TD>
<TD valign="top" width="100"><span id="somename4" class="alsoname">DATA5</span></TD>
</TR>
<TR>
<TD class="rowLabel" valign="top">Data name</TD>
<TD valign="top" width="100"><span id="somename5" class="alsoname">DATA6</span></TD>
</TR>
<TR>
<TD class="rowLabel" valign="top">Data name</TD>
<TD valign="top" width="100"><span id="somename6" class="alsoname">DATA7</span></TD>
</TR>
<TR>
<TD class="rowLabel" valign="top">Data name</TD>
<TD valign="top" width="100"><span id="somename7" class="alsoname">DATA8</span></TD>
</TR>
我想根据 span id 名称从括号中收集数据值。 如果 span ID == somename1 则将它的数据值放入变量中。
到目前为止我有这段代码:
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
if tag == 'span':
for name, value in attrs:
if name == 'id' and value == 'somename1':
print 'ID', value
elif name == 'id' and value == 'somename2':
print 'ID', value
elif name == 'id' and value == 'somename3':
print 'ID', value
else :
print 'NO DATA'
p = MyHTMLParser()
p.feed(flush)
谁能帮帮我?
最佳答案
我发现将 BeautifulSoup 与任何类型的 HTML 一起使用要容易得多。
from BeautifulSoup import BeautifulSoup as bs
from urllib2 import urlopen
data = urlopen('wherever').read()
soup = bs(data)
for span in soup.findAll('span'):
print span['id'], span.text
您可能需要改进它的某些部分,因为您只提供了一个表格。
关于python - 解析 <span> 标签并使用 python 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8413581/