2017-01-16 2 views
0

Я использую Beautifulsoup для преобразования данных в эту таблицу в json. Однако, как мне получить данные между тегами?Получить данные строки из таблицы с помощью 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

Вот пример. См. this question о том, как декодировать экранированные строки HTML в соответствии с вашей версией python.

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

Принимая во внимание фактическую постановку задачи о преобразовании HTML в JSON, вы можете использовать pandas.read_html() читать HTML в DataFrame, а затем преобразовать его в словарь:

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.

Существует также .to_json() method, который может непосредственно сбросить DataFrame до JSON, но я не понял, как его использовать в данном конкретном случае.

+0

Несмотря на то, что панды, вероятно, будут выполнять эту работу, это слишком много для такой простой задачи, и я использую Beautifulsoup уже в этом проекте (чтобы найти таблицу в html-файле). Спасибо, в любом случае. – FeedTheWeb

+0

@lxer уверен, не проблема, это просто еще один инструмент для решения проблемы. – alecxe

 Смежные вопросы

  • Нет связанных вопросов^_^