2

私は Python の初心者で、解決できない問題が発生しています (約 100 万回の Google 検索を行った後でも)。

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')]

編集:番号を取り戻したい場合はを呼び出すことができますが、これにより、などのタグでエラーが発生しfloatます。ただし、これで開始できます。col.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 に答える