GNU/Linux >> Linux の 問題 >  >> Linux

HTML テーブルからのデータの抽出

pandas.read_html を使用:

import pandas as pd
html_tables = pd.read_html('resources/test.html')
df = html_tables[0]
df.T # transpose to align
                   0
Tests            103
Failures          24
Success Rate  76.70%
Average Time   71 ms

BeautifulSoup4 を使用した Python ソリューション (編集: 適切なスキップで。 編集 3: class="details" の使用 table を選択するには ):

from bs4 import BeautifulSoup

html = """
  <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
    <tr valign="top">
      <th>Tests</th>
      <th>Failures</th>
      <th>Success Rate</th>
      <th>Average Time</th>
      <th>Min Time</th>
      <th>Max Time</th>
   </tr>
   <tr valign="top" class="Failure">
     <td>103</td>
     <td>24</td>
     <td>76.70%</td>
     <td>71 ms</td>
     <td>0 ms</td>
     <td>829 ms</td>
  </tr>
</table>"""

soup = BeautifulSoup(html)
table = soup.find("table", attrs={"class":"details"})

# The first tr contains the field names.
headings = [th.get_text() for th in table.find("tr").find_all("th")]

datasets = []
for row in table.find_all("tr")[1:]:
    dataset = zip(headings, (td.get_text() for td in row.find_all("td")))
    datasets.append(dataset)

print datasets

結果は次のようになります:

[[(u'Tests', u'103'),
  (u'Failures', u'24'),
  (u'Success Rate', u'76.70%'),
  (u'Average Time', u'71 ms'),
  (u'Min Time', u'0 ms'),
  (u'Max Time', u'829 ms')]]

編集 2: 目的の出力を生成するには、次のようなものを使用します:

for dataset in datasets:
    for field in dataset:
        print "{0:<16}: {1}".format(field[0], field[1])

結果:

Tests           : 103
Failures        : 24
Success Rate    : 76.70%
Average Time    : 71 ms
Min Time        : 0 ms
Max Time        : 829 ms

Linux
  1. ファイルからテキスト読み取りデータを作成しますか?

  2. データファイルからランダムに特定の数の線を描画しますか?

  3. DAEMON Sync –LinuxからAndroidおよびiOSデバイスへのデータの同期

  1. リモート SSH セッションからローカル クリップボードにデータを送信する方法

  2. STDIN からデータを読み取りながらファイルを圧縮する

  3. ある mysql データベースから別の mysql データベースにテーブルをコピーする方法

  1. awkを使用したデータの抽出と表示

  2. MySQL –InnoDBのテーブルごとのデータへの変換

  3. データファイルから特定の数の行をランダムに描画します