Data scraping / Skrobanie danych
po angielsku chyba lepiej brzmi
Pokażę jak w bardzo łatwy spsób można pobierać dane ze stron bo np. nie ma api a wiemy, że jest jakaś informacja na stronie i chcemy ją mieć w HA.
Scraping nie jest do końca legalny… omijamy reklamy itd… robimy to czysto edukacyjnie
Zrobimy to na bramce w JavaScript - NodeJS:
Załużmy, że chcemy pobrać kurs miedzi ze strony bankier.pl
Selektor css
w tym celu otweiramy w przeglądarce źródło strony i lokalizujemy element z ceną:
jak widać jest to div.profilLast
Program w nodejs
Teraz napiszemy programik który będzie te dane skrobał (echh) ze strony cenę miedzi.
W konsoli przechodzimy do AIS i tworzymy folder programy
cd ~/AIS
mkdir programy
cd programy
dodajemy plik miedz.js
nano miedz.js
z takim kodem:
const axios = require('axios');
const jsdom = require('jsdom');
const {JSDOM} = jsdom;
(async () => {
const html = await axios.get('https://www.bankier.pl/inwestowanie/profile/quote.html?symbol=MIEDZ');
const dom = new JSDOM(html.data);
const cena = dom.window.document.querySelector('div.profilLast');
if (cena) {
console.log(cena.textContent)
}
})();
zapisujemy plik, instalujemy 2 biblioteki:
npm install axios
npm install jsdom
teraz możemy już wywołać nasz program wpisując w konsoli:
node miedz.js
Pomocnik w aplikacji
dodajemy pomocnika w aplikacji - to w nim będziemy zpisywali cenę miedzi
kopujemy identyfikator encji nowego pomocnika
i dodajemy go na stronę w aplikacji
Wywołanie programu z usługi
service: ais_shell_command.execute_command
data:
command: node ~/AIS/programy/miedz.js
entity_id: input_text.cena_miedzi
Automatyzacja
To już wiadomo - możemy wywołać uslugę z automatyzacji i sprawdzać cenę codziennie automatycznie.
Data scraping nie jest legalnym sposobem na dostęp do danych i dlatego ten post ma charakter czysto edukacyjny - żeby pokazać jak technicznie działa skrobanie danych ze stron.