2017-01-16 16 views
0

私はこのテーブルのデータをjsonに変換するためにBeautifulsoupを使用しています。 しかし、どのようにしてタグ間でデータを取得できますか?Beautifilsoupを使用してテーブルから行データを取得

<table> 
<tr> 
    <th>Montag</th> 
    <td> 
    09:00 &ndash; 00:30 
    </td> 
</tr> 
<tr> 
    <th>Dienstag</th> 
    <td> 
    geschlossen 
    </td> 
</tr> 
<tr> 
    <th>Mittwoch</th> 
    <td> 
    12:00 &ndash; 00:30 
    </td> 
</tr> 
<tr> 
    <th>Donnerstag &ndash; Sonntag</th> 
    <td> 
    09:00 &ndash; 00:30 
    </td> 
</tr> 
</table> 

は残念ながら、これが動作していません。ここで

datesTable = BeautifulSoup(mytable) 

for row in datesTable: 
    print(row['th']) 

答えて

1

は一例です。 Pythonのバージョンに応じて、エスケープされたHTML文字列をデコードする方法については、this questionを参照してください。

考慮にJSONをHTMLに変換する、あなたの実際の問題文を取る
table = """ 
<table> 
<tr> 
    <th>Montag</th> 
    <td> 
    09:00 &ndash; 00:30 
    </td> 
</tr> 
<tr> 
    <th>Dienstag</th> 
    <td> 
    geschlossen 
    </td> 
</tr> 
<tr> 
    <th>Mittwoch</th> 
    <td> 
    12:00 &ndash; 00:30 
    </td> 
</tr> 
<tr> 
    <th>Donnerstag &ndash; Sonntag</th> 
    <td> 
    09:00 &ndash; 00:30 
    </td> 
</tr> 
</table>""" 

import json 
from bs4 import BeautifulSoup 

soup = BeautifulSoup(table, 'html5lib') 

data = {} 

for row in soup.findAll('tr'): 
    th = row.find('th') 
    td = row.find('td') 
    data[th.text.strip()] = td.text.strip() 

print(json.dumps(data)) 
+0

注:古くてメンテナンスされていない「BeautifulSoup」バージョン3を使用しています。 – alecxe

+0

ありがとう、私は私の答えを更新しました。 – Alden

0

、あなたがDataFrameにHTMLを読み込んで辞書に変換するpandas.read_html()を使用することができます。

import pandas as pd 

data = """ 
your HTML abbreviated to save space 
""" 

df = pd.read_html(data)[0] 
df.columns = ["label", "value"] 
print(dict(zip(df.label, df.value))) 

プリント:

{'Montag': '09:00 – 00:30', 
'Dienstag': 'geschlossen', 
'Mittwoch': '12:00 – 00:30', 
'Donnerstag – Sonntag': '09:00 – 00:30'} 

json.dumps()を使用すると、辞書をJSON文字列にさらにダンプできます。

DataFrameJSONに直接ダンプできる.to_json() methodもありますが、この特定の場合にどのように使用するかはわかりません。

+0

pandasはおそらく仕事をしていますが、このような単純な作業にはあまりにも多すぎますし、このプロジェクトではBeautifulsoupを使っています(htmlファイルでテーブルを見つけるために)。とにかくありがとう。 – FeedTheWeb

+0

@lxer確かに問題はなく、問題を解決するためのもう一つの手段です。 – alecxe

関連する問題