从HTML文件中以列表形式导入表格行在Python中
我是一名Python新手,遇到了一些问题,怎么也解决不了(即使我已经在谷歌上搜索了无数次)。
我有超过100个HTML文件,每个文件里都有几个表格。最终,我想把每个文件中第一个HTML表格的每一行提取出来,变成Python中的一个列表,但不想要HTML标签。现在我第一步是想搞清楚怎么去掉HTML标签,然后再想办法把这些内容导入成一个列表。
我的HTML文件看起来是这样的:
<tr><td>1</td><td>FORWARD</td><td>72</td><td>20</td><td>60.29</td><td>55.00</td><td>5.00</td><td>3.00</td></tr>
<tr><td> </td><td>REVERSE</td><td>258</td><td>20</td><td>60.11</td><td>45.00</td><td>4.00</td><td>3.00</td></tr>
<tr><td>2</td><td>FORWARD</td><td>77</td><td>20</td><td>60.08</td><td>50.00</td><td>5.00</td><td>2.00</td></tr>
<tr><td> </td><td>REVERSE</td><td>258</td><td>20</td><td>60.11</td><td>45.00</td><td>4.00</td><td>3.00</td></tr>
我想要的是把每一行的值放到列表里,类似于你手动做的时候得到的结果:
row1 = [FORWARD, 72, 20, 60.29, 55.0, 5.00, 3.00].
我听说BeautifulSoup可能会有帮助,所以我试了一下:
from bs4 import BeautifulSoup
def removeTags(html, *tags):
soup = BeautifulSoup(html)
for tag in tags:
for tag in soup.findAll(tag):
tag.replaceWith("")
return soup
testhtml = open('myfile.html', 'r')
print removeTags(testhtml, 'tr', 'td')
但这似乎把表格里的所有信息都删掉了,而不仅仅是HTML标签。我还尝试了其他几种方法,但我似乎卡住了。任何建议我都会很感激。
3 个回答
0
根据你提供的样本数据,你可以用下面的代码把第一行数据提取成一个列表:
>>> list(soup.find('tr').strings)
[u'1', u'FORWARD', u'72', u'20', u'60.29', u'55.00', u'5.00', u'3.00']
0
试试这样做:
soup = BeautifulSoup(html)
table = soup.find('table')
rows = table.findAll('tr')
for row in rows:
print [col.string for col in row.findAll('td')]
补充说明:如果你想要得到数字,可以对 col.string
使用 float
,但这样会对 'FORWARD'
等标签报错。不过,这个方法应该能帮助你入门。
2
这段代码有点儿粗糙,但能达到目的。
with open('htmlfile.html','r') as file:
rows = []
for line in file:
start = max(line.find('FORWARD'),line.find('REVERSE'))
rows.append(line[start:].replace('<','').replace('>','').replace('/','').replace('td',' ').replace('tr',' ').strip().split(' '))
print(rows)