Šiame pavyzdyje struktūrizuotai nuskaitysime duomenys, kai jie yra lentelės pagrindo.
Struktūrizuotai nuskaitykime NT projekto “Fino namai” butų lentelę, kurioje saugoma informacija apie butus (kainos, aukštas, plotas ir pan.). Šiose mokomose instrukcijose naudosime nebekintančią puslapio vietinę kopiją.

HTML lentelių pagrindai
HTML kalboje lentelės aprašomos <table>, <tr> ir <td> žymomis. <tr> žymoje yra aprašyta viena lentelės eilutė, o <td> žymoje – vienos eilutės vienas stulpelis. Sukurkime paprastos trijų eilučių (pirmoji – antraštės) su dviem stulpeliais lentelės pavyzdį HTML kalba:
| Šalis | Sostinė |
| Lietuva | Vilnius |
| Ukraina | Lviv |
Šios lentelės atvaizdavimas HTML kodu būtų toks:
<table>
<tr>
<td>Šalis</td>
<td>Sostinė</td>
</tr>
<tr>
<td>Lietuva</td>
<td>Vilnius</td>
</tr>
<tr>
<td>Ukraina</td>
<td>Lviv</td>
</tr>
</table>
Lentelės struktūra pavyzdyje
Grįškime į pavyzdį. Tipininė lentelės eilutė turėtų tokios stuktūros HTML kodą:
<table>
..
<tr class="row-2 even">
<td class="column-1">1-2</td>
<td class="column-2">1 aukštas</td>
<td class="column-3">2 kambariai</td>
<td class="column-4">33,62 m2</td>
<td class="column-5">126000 Eur</td>
<td class="column-6"><a href="https://finonamai.lt/1aukstas-2butas/"></a>
</td>
</tr>
..
</table>
Nuo paprasto pirmojo pavyzdžio skiriasi tuo, kad yra daugiau lentelės stulpelių (6), be to <tr> ir <td> žymos turi atributus class, nurodančios kaip vizualiai atrodys duomenys. Class atributai neturi įtakos patiems duomenims, todėl galima jų reikšmes ignoruoti.
Prašykime reguliarų reiškinį kuris galėtų nusakyti šios HTML lentelės struktūrą:
r = re.compile('<tr class=".*?">\s+<td class="column-1">(.*?)</td><td class="column-2">(.*?)</td><td class="column-3">(.*?)</td><td class="column-4">(.*?)</td><td class="column-5">(.*?)</td><td class="column-6"><a href="(.*?)"></a></td>')
Rezultatai atrodys taip:
('1-1', '1 auk\xc5\xa1tas', '2 kambariai', '31,29 m2', '117000 Eur', 'https://finonamai.lt/1aukstas-1butas/')
('1-2', '1 auk\xc5\xa1tas', '2 kambariai', '33,62 m2', '126000 Eur', 'https://finonamai.lt/1aukstas-2butas/')
('2-3', '2 auk\xc5\xa1tas', '2 kambariai', '48,87 m2', '173000 Eur', 'https://finonamai.lt/2aukstas-3butas/')
...
Pastebime, kad kol kas duomenys grąžinami ne tuo formatu, kuriuo reikalinga šiai užduočiai. Mums reikia sąrašo struktūrizuotai apibūdintų butų su teisingais butais (šiuo metu visos reikšmės – teksto eilutės).
Sutvarkyti duomenis galima arba rašant papildomas apdorojimo koimandas kiekviena duomenų reikšmei, tačiau patogiausia naudotis mūsų bibliotekomis kurios paverčia duomenis reikalingu formatu, nurodant kuris stulpelis ką reiškia laukeliu <schema>:
transform_data = {
'email': 'tavo@email.com',
'data': json.dumps(results),
'schema': json.dumps(['id', 'floor', 'rooms', 'area', 'price', 'www']),
}
tranform_response = requests.post('http://www.citynow.org/api/transform', data=transform_data).json()
transform_results = tranform_response.get('results')
print(transform_results)
Įvykdžius šią komandą, rezultatai bus transformuoti į šį formatą:
{"results": [
{
"www": "https://finonamai.lt/1aukstas-1butas/",
"area": 31.29,
"price": 117000,
"floor": 1,
"rooms": 2,
"id": "1-1"
},
...
]
}
Po duomenų transformavimo žingsnio likio paskutiniai keli tvarkymo žingsniai:
- Išimti komercines patalpas iš buto sąrašo
- Pridėti kiekvienam butui statuso laukelį (su reikšme “Laisvas”)
Atkreipiame dėmesį, kad kviesdami šį API naudojome .json() metodą, nes API grąžina duomenis struktūrizuotu (JSON) formatu.
Taip atrodys pilnas veikiantys pavyzdys:





