2

我是一个 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>&nbsp;</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>&nbsp;</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 标记。我也尝试了其他几件事,但我似乎被卡住了。我将不胜感激任何建议。

4

3 回答 3

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)
于 2013-02-19T23:56:18.953 回答
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')]

编辑:如果你想取回数字,你可以打电话floatcol.string但这会给你一个错误'FORWARD',等等,标签。但是,这应该可以帮助您入门。

于 2013-02-19T23:50:37.153 回答
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']
于 2013-02-19T23:58:15.493 回答