Kai kuriems duomenų šaltinims duomenis nuskaityti reikia per POST tipo užklausa, o ne GET. Šiame pavyzdyje aprašysime kaip nuskaityti duomenis Python programavimo kalboje naudojant POST užklausas.
POST užklausos. Jas skiriasi nuo GET užklausų pagrinde tuom, kaip perduodami duomenys iš naršyklės serveriui. Naudojant GET metodą, duomenys perduodami UR parametre (t.y.: www.domenas.lt?param1=reikšmė1¶m2=reikšmė2…, o naudojant POST metodą parametrai URL nesimato – užkoduojami užklausos viduje). Pamatyti ar naudojam GET, ar POST užklausa galima naršyklėje: Network tabe -> Headers:

Nuskaitykime butų duomenis NT projekto “Ryto namai” svetainėje. Pagal konkrečių duomenų paiešką (pvz. viena iš matomų kainų 173597 EUR), identifikuojame kad butų lentelė gražinama per API, naudojant šį adresą, veikiantį POST metodų: https://www.rytonamai.lt/api/filter. Network skilties “Response” tabe iš tiesų matome butų lentelę nusakantį HTML kodą:

Paspaudus dešinę pelės klavišą ties iškviečiamu API (/api/filter), nukopijuokite visus užklausos parametrus, t.y. Copy -> Copy as cURL. Įklijavus nukopijuotą dalį matytume tokį tekstą:
curl ‘https://www.rytonamai.lt/api/filter’ \
-H ‘authority: www.rytonamai.lt’ \
-H ‘accept: application/json, text/javascript, /; q=0.01′ \
-H ‘accept-language: en-GB,en-US;q=0.9,en;q=0.8,lt;q=0.7’ \
-H ‘cache-control: no-cache’ \
-H ‘content-type: application/x-www-form-urlencoded; charset=UTF-8’ \
-H ‘cookie: hideCookieBar=1; october_session=eyJpdiI6InNZbzA3TWUyTUpCN2FHUkQ5SzNpNWc9PSIsInZhbHVlIjoiNTRtVUo2ODcwek04RUMrZG5ZYUMwZGdRTWlvNGJ0d1BibmNnTVlja2lna2oxdXQ5ck02S1dnKzJMZVB3TEJnWDZmbEd4VXlEQ1JhdGZXZ0R6WFJycHRSRnVkS2hpR0VuUHhoaTlORmRwQ0FvYkNDQkp1TnhWa3Q4TWRmREhqZHYiLCJtYWMiOiIyNzcxMzZmNzkxZWE4NDU0ZGZiN2U3MDQyOTMwOTA4MTY1MTJlYjI1YjM1NDg0MDNhZWFhZDFhYjRlMjk4YTc5In0%3D’ \
-H ‘origin: https://www.rytonamai.lt’ \
-H ‘pragma: no-cache’ \
-H ‘referer: https://www.rytonamai.lt/rinktis-busta’ \
-H ‘sec-ch-ua: “.Not/A)Brand”;v=”99″, “Google Chrome”;v=”103″, “Chromium”;v=”103″‘ \
-H ‘sec-ch-ua-mobile: ?0’ \
-H ‘sec-ch-ua-platform: “macOS”‘ \
-H ‘sec-fetch-dest: empty’ \
-H ‘sec-fetch-mode: cors’ \
-H ‘sec-fetch-site: same-origin’ \
-H ‘user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36’ \
-H ‘x-requested-with: XMLHttpRequest’ \
–data-raw ‘free=0&discount=0&area%5B%5D=20&area%5B%5D=80&rooms%5B%5D=1&rooms%5B%5D=4&floor%5B%5D=0&floor%5B%5D=4’ \
–compressed
Šis tekstas iš esmės nusako kokių parametrų reikia norint gauti lygiai tokį patį Python programoje. Teliko konvertuoti tai į Python requests bilbiotekos užklausą. Tai galime padaryti rankiniu būdu, arba patogu pasinaudoti internetiniais įrankiais (pvz. google “CURL” to “Python request”)

Gausime HTMLa:
<a href=”https://www.rytonamai.lt/aukstas/0/1″ class=”table__row free reveal”><div class=”table__col”><p>1</p></div><div class=”table__col”><p>0</p></div><div class=”table__col”><p>3</p></div><div class=”table__col”><p>55.64</p></div><div class=”table__col”><p>173597 €</p></div><div class=”table__col”><p>Laisva</p></div></a>…
Parasome jam reguliaru reiskini
rg = re.compile('<a href="(.*?)" class="table__row.*?"><div class="table__col"><p>(.*?)</p></div><div class="table__col"><p>(.*?)</p></div><div class="table__col"><p>(.*?)</p></div><div class="table__col"><p>(.*?)</p></div><div class="table__col"><p>(.*?) €</p></div><div class="table__col"><p>(.*?)</p></div>')
results = rg.findall(html)
for result in results:
print result
Jis išspausdintų tokius rezultatus:
('https://www.rytonamai.lt/aukstas/0/1', '1', '0', '3', '55.64', '173597', 'Laisva')
('https://www.rytonamai.lt/aukstas/0/2', '2', '0', '2', '52.05', '158232', 'Laisva')
('https://www.rytonamai.lt/aukstas/0/3', '3', '0', '1', '37.84', '117682', 'Laisva')
('https://www.rytonamai.lt/aukstas/0/4', '4', '0', '1', '37.71', '117278', 'Laisva')
('https://www.rytonamai.lt/aukstas/1/5', '5', '1', '2', '46.63', '143620', 'Laisva')
('https://www.rytonamai.lt/aukstas/1/6', '6', '1', '3', '64.28', '197340', 'Laisva')
('https://www.rytonamai.lt/aukstas/1/7', '7', '1', '2', '51.06', '156754', 'Laisva')
Tai atitnka tokius stulpelius:
['www', 'id', 'floor', 'rooms', 'area', 'price', 'status']





