如何解析python中的特定不规则表?



我试着解析这个例子大学时间表已经有一段时间了。

最大的问题是这里的数据是如何呈现的。

Every day由<tr>分隔,其中<td>附在第一列。我试过Pandas,但是它被这个弄糊涂了,打印了一些奇怪的表。

url = r'http://www.plan.uz.zgora.pl/grupy_plan.php?ID=23563'
tables = pd.read_html(url)
print(tables)

如果有人感兴趣,这里有这个时间表的链接。


我也试过把它转换成JSON,但是我从它得到的数据真的很困惑解析。这里,链接到Pastebin.

我将感激任何解决办法。

read_html()适用于简单的表,但对于更复杂的东西,您需要BeautifulSouplxml来解析HTML/xml,并使用HTML/xml中的每个元素(不仅与文本)

我使用BeautifulSoup来查找表中的所有行,跳过标题,然后我使用for-loop分别处理每一行,并检查class="gray"以识别具有日期名称的行。

import requests 
from bs4 import BeautifulSoup
import pandas as pd
url = 'http://www.plan.uz.zgora.pl/grupy_plan.php?ID=23576'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
data = []      # list for data from all rows
dayname = ''   # string with current day name 
# get all rows from table
all_rows = soup.find('table', {'id': 'table_groups'}).find_all('tr')
for row in all_rows[1:]:   # `[1:]` to skip header
if 'gray' in row.get('class'):
dayname = row.text.strip()
print('DAY NAME:', dayname)
else: 
cols = row.find_all('td')  # get all columns in row
cols = [x.text.strip() for x in cols]  # get text from all columns

print('     Dzień:', dayname)
print('        PG:', cols[0])
print('        Od:', cols[1])
print('        Do:', cols[2])
print(' Przedmiot:', cols[3])
print('        RZ:', cols[4])
print('Nauczyciel:', cols[5])
print('   Miejsce:', cols[6])
print('   Terminy:', cols[7])

cols.insert(0, dayname)  # add day name to row as first column
data.append(cols)  # keep row on list
print('---')

结果:

DAY NAME: Poniedziałek
---
Dzień: Poniedziałek
PG: 
Od: 07:35
Do: 09:00
Przedmiot: Technika eksperymentu
RZ: W
Nauczyciel: dr hab. inż. Ryszard Rybski, prof. UZ
Miejsce: 
Terminy: DI
---
Dzień: Poniedziałek
PG: 
Od: 09:15
Do: 10:45
Przedmiot: Analiza danych
RZ: W
Nauczyciel: prof. dr hab. inż. Dariusz Uciński
Miejsce: 
Terminy: D
---
Dzień: Poniedziałek
PG: A
Od: 11:00
Do: 12:30
Przedmiot: Programowanie obiektowe
RZ: L
Nauczyciel: dr inż. Paweł Majdzik
Miejsce: 
Terminy: D
---
Dzień: Poniedziałek
PG: B
Od: 12:45
Do: 14:15
Przedmiot: Programowanie obiektowe
RZ: L
Nauczyciel: dr inż. Paweł Majdzik
Miejsce: 
Terminy: D
---
DAY NAME: Wtorek
---
Dzień: Wtorek
PG: 
Od: 09:15
Do: 10:45
Przedmiot: Teoretyczne podstawy informatyki
RZ: W
Nauczyciel: prof. dr hab. inż. Andrzej Obuchowicz
Miejsce: 
Terminy: D
---
Dzień: Wtorek
PG: 
Od: 11:00
Do: 12:30
Przedmiot: Teoretyczne podstawy informatyki
RZ: Ć
Nauczyciel: prof. dr hab. inż. Andrzej Obuchowicz
Miejsce: 
Terminy: D
---
Dzień: Wtorek
PG: 
Od: 12:45
Do: 14:20
Przedmiot: Podstawy systemów dyskretnych
RZ: Ć
Nauczyciel: prof. dr hab. Roman Gielerak
Miejsce: 
Terminy: DN
---
Dzień: Wtorek
PG: 
Od: 14:30
Do: 16:00
Przedmiot: Podstawy systemów dyskretnych
RZ: W
Nauczyciel: prof. dr hab. Roman Gielerak
Miejsce: 
Terminy: D
---
DAY NAME: Środa
---
Dzień: Środa
PG: 
Od: 07:35
Do: 09:00
Przedmiot: Fizyka
RZ: W
Nauczyciel: dr Stefan Jerzyniak
Miejsce: 
Terminy: DP
---
Dzień: Środa
PG: B
Od: 09:15
Do: 10:45
Przedmiot: Analiza danych
RZ: L
Nauczyciel: dr hab. inż. Andrzej Janczak, prof. UZ
Miejsce: 
Terminy: D
---
Dzień: Środa
PG: A
Od: 11:00
Do: 12:30
Przedmiot: Analiza danych
RZ: L
Nauczyciel: dr hab. inż. Andrzej Janczak, prof. UZ
Miejsce: 
Terminy: D
---
Dzień: Środa
PG: 
Od: 12:45
Do: 14:15
Przedmiot: Programowanie obiektowe
RZ: W
Nauczyciel: dr inż. Paweł Majdzik
Miejsce: 
Terminy: D
---
Dzień: Środa
PG: A
Od: 15:50
Do: 17:25
Przedmiot: Podstawy systemów dyskretnych
RZ: L
Nauczyciel: mgr inż. Mariusz Downar
Miejsce: 
Terminy: DN
---
Dzień: Środa
PG: B
Od: 19:05
Do: 20:40
Przedmiot: Podstawy systemów dyskretnych
RZ: L
Nauczyciel: mgr inż. Mariusz Downar
Miejsce: 
Terminy: DN
---
DAY NAME: Czwartek
---
Dzień: Czwartek
PG: A
Od: 07:45
Do: 10:00
Przedmiot: Technika eksperymentu
RZ: L
Nauczyciel: dr hab. inż. Sergiusz Sienkowski, prof. UZ
Miejsce: 
Terminy: 2021-03-04; 2021-03-11; 2021-03-18; 2021-03-25; 2021-04-08; 2021-04-15; 2021-04-22; 2021-04-29; 2021-05-06; 2021-05-13
---
Dzień: Czwartek
PG: 
Od: 11:00
Do: 12:30
Przedmiot: Fizyka
RZ: Ć
Nauczyciel: dr Krzysztof Maciesiak
Miejsce: 
Terminy: D
---
Dzień: Czwartek
PG: B
Od: 12:45
Do: 15:00
Przedmiot: Technika eksperymentu
RZ: L
Nauczyciel: dr hab. inż. Sergiusz Sienkowski, prof. UZ
Miejsce: 
Terminy: 2021-03-04; 2021-03-11; 2021-03-18; 2021-03-25; 2021-04-08; 2021-04-15; 2021-04-22; 2021-04-29; 2021-05-06; 2021-05-13
---
DAY NAME: Piątek
---
Dzień: Piątek
PG: 
Od: 09:15
Do: 10:45
Przedmiot: Wprowadzenie do sieci komputerowych
RZ: W
Nauczyciel: dr hab. inż. Marcin Mrugalski, prof. UZ
Miejsce: 
Terminy: D

您可以使用pandas保存为csvjson

df = pd.DataFrame(data, columns=['Dzień', 'PG', 'Od', 'Do', 'Przedmiot', 'RZ', 'Nauczyciel', 'Miejsce', 'Terminy'])
print(df)
df.to_csv('output.csv', index=False)
df.to_json('output.json', orient='records', indent=2, force_ascii=False)
print(df.to_json(orient='records', indent=2, force_ascii=False))

结果:

[
{
"Dzień":"Poniedziałek",
"PG":"A",
"Od":"07:30",
"Do":"09:00",
"Przedmiot":"Seminarium dyplomowe I",
"RZ":"P",
"Nauczyciel":"prof. dr hab. inż. Krzysztof Patan",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Poniedziałek",
"PG":"B",
"Od":"09:15",
"Do":"10:45",
"Przedmiot":"Seminarium dyplomowe I",
"RZ":"P",
"Nauczyciel":"prof. dr hab. inż. Krzysztof Patan",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Poniedziałek",
"PG":"A",
"Od":"09:15",
"Do":"12:15",
"Przedmiot":"Projekt grupowy",
"RZ":"P",
"Nauczyciel":"dr inż. Anna Pławiak-Mowna",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Poniedziałek",
"PG":"B",
"Od":"11:00",
"Do":"12:30",
"Przedmiot":"Testowanie i rozwój aplikacji",
"RZ":"L",
"Nauczyciel":"dr inż. Jacek Bieganowski",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Poniedziałek",
"PG":"A",
"Od":"12:45",
"Do":"14:15",
"Przedmiot":"Testowanie i rozwój aplikacji",
"RZ":"L",
"Nauczyciel":"dr inż. Jacek Bieganowski",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Poniedziałek",
"PG":"B",
"Od":"12:45",
"Do":"14:20",
"Przedmiot":"Platforma.NET",
"RZ":"P",
"Nauczyciel":"dr inż. Marek Sawerwain",
"Miejsce":"",
"Terminy":"DN"
},
{
"Dzień":"Wtorek",
"PG":"A",
"Od":"07:30",
"Do":"12:30",
"Przedmiot":"Język angielski IV/Język niemiecki IV",
"RZ":"L",
"Nauczyciel":"mgr Jolanta Bąk",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Wtorek",
"PG":"B",
"Od":"07:30",
"Do":"12:30",
"Przedmiot":"Język angielski IV/Język niemiecki IV",
"RZ":"L",
"Nauczyciel":"mgr Jolanta Bąk",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Środa",
"PG":"",
"Od":"07:30",
"Do":"09:05",
"Przedmiot":"Projektowanie sieci komputerowych",
"RZ":"W",
"Nauczyciel":"dr hab. inż. Bartłomiej Sulikowski, prof. UZ",
"Miejsce":"",
"Terminy":"DN"
},
{
"Dzień":"Środa",
"PG":"",
"Od":"07:35",
"Do":"09:00",
"Przedmiot":"Testowanie i rozwój aplikacji",
"RZ":"W",
"Nauczyciel":"dr inż. Jacek Bieganowski; dr inż. Michał Doligalski",
"Miejsce":"",
"Terminy":"DP"
},
{
"Dzień":"Środa",
"PG":"B",
"Od":"09:15",
"Do":"10:45",
"Przedmiot":"Projektowanie sieci komputerowych",
"RZ":"L",
"Nauczyciel":"mgr inż. Marcin Pazera",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Środa",
"PG":"",
"Od":"11:00",
"Do":"12:30",
"Przedmiot":"Platforma.NET",
"RZ":"W",
"Nauczyciel":"dr inż. Marek Sawerwain",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Środa",
"PG":"A",
"Od":"12:45",
"Do":"14:15",
"Przedmiot":"Projektowanie sieci komputerowych",
"RZ":"L",
"Nauczyciel":"mgr inż. Marcin Pazera",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Środa",
"PG":"B",
"Od":"12:45",
"Do":"14:15",
"Przedmiot":"Platforma.NET",
"RZ":"L",
"Nauczyciel":"dr inż. Marek Sawerwain",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Czwartek",
"PG":"B",
"Od":"12:10",
"Do":"15:10",
"Przedmiot":"Projekt grupowy",
"RZ":"P",
"Nauczyciel":"dr inż. Małgorzata Mazurkiewicz",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Piątek",
"PG":"A",
"Od":"07:30",
"Do":"09:00",
"Przedmiot":"Platforma.NET",
"RZ":"L",
"Nauczyciel":"mgr inż. Mariusz Downar",
"Miejsce":"",
"Terminy":"2021-04-09; 2021-04-16; 2021-04-23; 2021-04-30; 2021-05-07; 2021-05-14; 2021-05-21; 2021-05-28; 2021-06-04; 2021-06-11; 2021-06-18"
},
{
"Dzień":"Piątek",
"PG":"",
"Od":"09:30",
"Do":"11:00",
"Przedmiot":"Programowanie urządzeń mobilnych",
"RZ":"W",
"Nauczyciel":"dr inż. Piotr Powroźnik",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Piątek",
"PG":"A",
"Od":"11:10",
"Do":"11:55",
"Przedmiot":"Programowanie urządzeń mobilnych",
"RZ":"P",
"Nauczyciel":"dr inż. Piotr Powroźnik",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Piątek",
"PG":"B",
"Od":"12:05",
"Do":"12:50",
"Przedmiot":"Programowanie urządzeń mobilnych",
"RZ":"P",
"Nauczyciel":"dr inż. Piotr Powroźnik",
"Miejsce":"",
"Terminy":"D"
},
{
"Dzień":"Piątek",
"PG":"A",
"Od":"14:20",
"Do":"15:50",
"Przedmiot":"Platforma.NET",
"RZ":"P",
"Nauczyciel":"mgr inż. Mariusz Downar",
"Miejsce":"",
"Terminy":"2021-04-09; 2021-04-16; 2021-04-23"
},
{
"Dzień":"Piątek",
"PG":"A",
"Od":"14:20",
"Do":"15:50",
"Przedmiot":"Platforma.NET",
"RZ":"L",
"Nauczyciel":"mgr inż. Mariusz Downar",
"Miejsce":"",
"Terminy":"2021-05-14; 2021-05-28; 2021-06-11; 2021-06-18"
},
{
"Dzień":"Piątek",
"PG":"A",
"Od":"16:00",
"Do":"18:15",
"Przedmiot":"Platforma.NET",
"RZ":"P",
"Nauczyciel":"mgr inż. Mariusz Downar",
"Miejsce":"",
"Terminy":"2021-05-28; 2021-06-11; 2021-06-18"
}
]

代码需要一些代码才能在Przedmiot中获得MiejsceGoogle Classroom

最新更新