{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Robo-MZOIP - ocjene prihvatljivosti za ekološku mrežu Natura 2000" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Uvod\n", "\n", "### Natura 2000\n", "\n", "Zakonski okvir: EU Direktiva o pticama (79/409/EEC), Direktiva o staništima (92/43/EEC)\n", "\n", "http://ec.europa.eu/environment/nature/legislation/birdsdirective/index_en.htm\n", "\n", "http://ec.europa.eu/environment/nature/legislation/habitatsdirective/index_en.htm\n", "\n", " * Područja očuvanja značajna za ptice\n", " * Područja očuvanja značajna za vrste i staništa\n", "\n", " * Postupak ocjene prihvatljivosti za ekološku mrežu\n", " - Prethodna ocjena\n", " - Glavna ocjena\n", "\n", "## Problem\n", "\n", " * Nepregledna stranica Ministarstva zaštite okoliša i energetike.\n", " * Dokumenti se dodaju na način da je nemoguće sustavno pratiti njihovo dodavanje.\n", "\n", "## Rješenje\n", "\n", " * Web scraper (python3 + requests + beautiful soup 4)\n", " * Twitter" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [], "source": [ "import argparse\n", "from datetime import datetime\n", "import os\n", "import re\n", "import sys\n", "import requests\n", "from bs4 import BeautifulSoup\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Definicija stranica koja nas zanimaju:" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [], "source": [ "BASE_URL_MZOE = 'http://mzoe.hr'\n", "BASE_URL_OPEM = 'http://mzoe.hr/hr/priroda/ekoloska-mreza-natura-2000.html'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dohvaćanje html stranice, i kreiranje `soup` objekta sa stranice Ministarstva:" ] }, { "cell_type": "code", "execution_count": 138, "metadata": {}, "outputs": [], "source": [ "def get_soup(full_url):\n", " \"\"\"Dohvaca soup objekt s mreznih stranica.\n", "\n", " Args:\n", " full_url (str): path do stranice.\n", " Returns:\n", " soup: beautifulsoup object.\n", " \"\"\"\n", " r = requests.get(full_url)\n", " soup = BeautifulSoup(r.content, 'lxml')\n", " return soup" ] }, { "cell_type": "code", "execution_count": 139, "metadata": {}, "outputs": [], "source": [ "soup = get_soup(BASE_URL_OPEM)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Glavne ocjene u nadležnosti Ministarstva" ] }, { "cell_type": "code", "execution_count": 140, "metadata": {}, "outputs": [], "source": [ "opem = soup.find('div', 'accordion').find_all('div', 'accordion')\n", "a = opem[0].find_all('a')" ] }, { "cell_type": "code", "execution_count": 141, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "16.02.2018. - INFORMACIJA o zahtjevu za provođenje postupka Glavne ocjene prihvatljivosti za ekološku mrežu [PDF 630.39 kB]\n", "05.12.2017. - OBAVIJEST o javnoj raspravi [PDF 777.69 kB]\n" ] } ], "source": [ "print(a[0])\n", "print(a[4])" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Uređenje vodnog puta rijeke Dunav kod Sotina na području Vukovarsko-srijemske županije\n", "http://mzoe.hr/doc/16022018_-_informacija_o_zahtjevu_za_provodenje_postupka_glavne_ocjene_prihvatljivosti_za_ekolosku_mrezu.pdf\n", "Radovi sanacije korita, uklanjanje nanosa i radovi redovitog održavanja vodnog režima na rijeci Bregani\n", "http://mzoe.hr/doc/05122017_-_obavijest_o_javnoj_raspravi.pdf\n" ] } ], "source": [ "print(a[0].parent.parent.parent.previous_sibling.previous_sibling.get_text().strip())\n", "print(BASE_URL_MZOE + a[0].get('href'))\n", "print(a[4].parent.parent.parent.previous_sibling.previous_sibling.get_text().strip())\n", "print(BASE_URL_MZOE + a[4].get('href'))" ] }, { "cell_type": "code", "execution_count": 143, "metadata": {}, "outputs": [], "source": [ "opem_raw = []\n", "for link in a:\n", " red = [link.parent.parent.parent.previous_sibling.previous_sibling.get_text().strip(),\n", " link.get_text(),\n", " BASE_URL_MZOE + link.get('href')]\n", " opem_raw.append(red)\n", "opem_pd = pd.DataFrame(opem_raw)" ] }, { "cell_type": "code", "execution_count": 144, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012
0Uređenje vodnog puta rijeke Dunav kod Sotina n...16.02.2018. - INFORMACIJA o zahtjevu za provođ...http://mzoe.hr/doc/16022018_-_informacija_o_za...
1Uređenje vodnog puta rijeke Dunav kod Sotina n...24.11.2015. - RJEŠENJE Ministarstva od 11. stu...http://mzoe.hr/doc/24112015_-_rjesenje_minista...
2Uređenje vodnog puta rijeke Dunav kod Sotina n...02.10.2015. - INFORMACIJA o zahtjevu za provođ...http://mzoe.hr/doc/02102015_-_informacija_o_za...
3Izgradnja cestovnog mosta preko rijeke Drave n...13.12.2017. - INFORMACIJA o zahtjevu za provođ...http://mzoe.hr/doc/13122017_-_informacija_o_za...
4Radovi sanacije korita, uklanjanje nanosa i ra...05.12.2017. - OBAVIJEST o javnoj raspravi [PDF...http://mzoe.hr/doc/05122017_-_obavijest_o_javn...
5Radovi sanacije korita, uklanjanje nanosa i ra...05.12.2017. - STUDIJA Glavne ocjene prihvatlji...http://mzoe.hr/doc/05122017_-_studija_glavne_o...
6Radovi sanacije korita, uklanjanje nanosa i ra...07.11.2017. - INFORMACIJA o zahtjevu za provođ...http://mzoe.hr/doc/07112017_-_informacija_o_za...
7Pregrada na rukavcu starog toka rijeke Drave22.11.2017. - RJEŠENJE Ministarstva od 21. stu...http://mzoe.hr/doc/22112017_-_rjesenje_minista...
8Pregrada na rukavcu starog toka rijeke Drave12.09.2017. - OBAVIJEST o javnoj raspravi [PDF...http://mzoe.hr/doc/12092017_-_obavijest_o_javn...
9Pregrada na rukavcu starog toka rijeke Drave12.09.2017. - STUDIJA Glavne ocjene prihvatlji...http://mzoe.hr/doc/12092017_-_studija_glavne_o...
\n", "
" ], "text/plain": [ " 0 \\\n", "0 Uređenje vodnog puta rijeke Dunav kod Sotina n... \n", "1 Uređenje vodnog puta rijeke Dunav kod Sotina n... \n", "2 Uređenje vodnog puta rijeke Dunav kod Sotina n... \n", "3 Izgradnja cestovnog mosta preko rijeke Drave n... \n", "4 Radovi sanacije korita, uklanjanje nanosa i ra... \n", "5 Radovi sanacije korita, uklanjanje nanosa i ra... \n", "6 Radovi sanacije korita, uklanjanje nanosa i ra... \n", "7 Pregrada na rukavcu starog toka rijeke Drave \n", "8 Pregrada na rukavcu starog toka rijeke Drave \n", "9 Pregrada na rukavcu starog toka rijeke Drave \n", "\n", " 1 \\\n", "0 16.02.2018. - INFORMACIJA o zahtjevu za provođ... \n", "1 24.11.2015. - RJEŠENJE Ministarstva od 11. stu... \n", "2 02.10.2015. - INFORMACIJA o zahtjevu za provođ... \n", "3 13.12.2017. - INFORMACIJA o zahtjevu za provođ... \n", "4 05.12.2017. - OBAVIJEST o javnoj raspravi [PDF... \n", "5 05.12.2017. - STUDIJA Glavne ocjene prihvatlji... \n", "6 07.11.2017. - INFORMACIJA o zahtjevu za provođ... \n", "7 22.11.2017. - RJEŠENJE Ministarstva od 21. stu... \n", "8 12.09.2017. - OBAVIJEST o javnoj raspravi [PDF... \n", "9 12.09.2017. - STUDIJA Glavne ocjene prihvatlji... \n", "\n", " 2 \n", "0 http://mzoe.hr/doc/16022018_-_informacija_o_za... \n", "1 http://mzoe.hr/doc/24112015_-_rjesenje_minista... \n", "2 http://mzoe.hr/doc/02102015_-_informacija_o_za... \n", "3 http://mzoe.hr/doc/13122017_-_informacija_o_za... \n", "4 http://mzoe.hr/doc/05122017_-_obavijest_o_javn... \n", "5 http://mzoe.hr/doc/05122017_-_studija_glavne_o... \n", "6 http://mzoe.hr/doc/07112017_-_informacija_o_za... \n", "7 http://mzoe.hr/doc/22112017_-_rjesenje_minista... \n", "8 http://mzoe.hr/doc/12092017_-_obavijest_o_javn... \n", "9 http://mzoe.hr/doc/12092017_-_studija_glavne_o... " ] }, "execution_count": 144, "metadata": {}, "output_type": "execute_result" } ], "source": [ "opem_pd.head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Glavne ocjene u nadležnosti županija/grada Zagreba" ] }, { "cell_type": "code", "execution_count": 145, "metadata": {}, "outputs": [], "source": [ "a1 = opem[1].find_all('a')\n", "opem_z_raw = []\n", "for link in a1:\n", " red = [link.parent.parent.parent.previous_sibling.previous_sibling.get_text().strip(),\n", " link.get_text(),\n", " BASE_URL_MZOE + link.get('href')]\n", " opem_z_raw.append(red)\n", "opem_z_pd = pd.DataFrame(opem_z_raw)" ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012
0Zaštita naselja Gradac i grada Pleternice od v...18.10.2016. - OBAVIJEST o provedbi javne raspr...http://mzoe.hr/doc/18102016_-_obavijest_o_prov...
1Ekološka revitalizacija područja starog korita...22.09.2016. - OBJAVA javne rasprave o Studiji ...http://mzoe.hr/doc/22092016_-_objava_javne_ras...
2Održavanje korita rijeke Dretulje na području ...19.05.2016. - OBJAVA javne rasprave o Studiji ...http://mzoe.hr/doc/19052016_-_objava_javne_ras...
3Obnova desnog nasipa rijeke Save s obaloutvrda...16.12.2015. - OBJAVA javne rasprave o Studiji ...http://mzoe.hr/doc/16122015_-_objava_javne_ras...
4Lječilišno-turistički kompleks 'Meline' u zalj...05.11.2015. - OBJAVA javne rasprave o Studiji ...http://mzoe.hr/doc/05112015_-_informacija_o_po...
\n", "
" ], "text/plain": [ " 0 \\\n", "0 Zaštita naselja Gradac i grada Pleternice od v... \n", "1 Ekološka revitalizacija područja starog korita... \n", "2 Održavanje korita rijeke Dretulje na području ... \n", "3 Obnova desnog nasipa rijeke Save s obaloutvrda... \n", "4 Lječilišno-turistički kompleks 'Meline' u zalj... \n", "\n", " 1 \\\n", "0 18.10.2016. - OBAVIJEST o provedbi javne raspr... \n", "1 22.09.2016. - OBJAVA javne rasprave o Studiji ... \n", "2 19.05.2016. - OBJAVA javne rasprave o Studiji ... \n", "3 16.12.2015. - OBJAVA javne rasprave o Studiji ... \n", "4 05.11.2015. - OBJAVA javne rasprave o Studiji ... \n", "\n", " 2 \n", "0 http://mzoe.hr/doc/18102016_-_obavijest_o_prov... \n", "1 http://mzoe.hr/doc/22092016_-_objava_javne_ras... \n", "2 http://mzoe.hr/doc/19052016_-_objava_javne_ras... \n", "3 http://mzoe.hr/doc/16122015_-_objava_javne_ras... \n", "4 http://mzoe.hr/doc/05112015_-_informacija_o_po... " ] }, "execution_count": 146, "metadata": {}, "output_type": "execute_result" } ], "source": [ "opem_z_pd.head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prethodne ocjene prihvatljivosti za ekološku mrežu" ] }, { "cell_type": "code", "execution_count": 147, "metadata": {}, "outputs": [], "source": [ "prethodne = soup.find_all('div', 'accordion')[3]" ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [], "source": [ "godpattern = re.compile(r\".*?(\\d{4}).*\")" ] }, { "cell_type": "code", "execution_count": 149, "metadata": {}, "outputs": [], "source": [ "prethodne_god = prethodne.find_all('h3')\n", "prethodne_raw = []\n", "for god in prethodne_god:\n", " dokumenti = god.next_sibling.next_sibling.find_all('a')\n", " for dok in dokumenti:\n", " red = [re.sub(godpattern,\n", " \"\\\\1\",\n", " god.get_text().strip()),\n", " dok.get_text(),\n", " BASE_URL_MZOE + dok.get('href')]\n", " prethodne_raw.append(red)\n", "prethodne_pd = pd.DataFrame(prethodne_raw)" ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012
0201802.03.2018. - Izgradnja peradarnika za uzgoj p...http://mzoe.hr/doc/02032018_-_izgradnja_perada...
1201827.02.2018. - Izgradnja drvene pješačke staze ...http://mzoe.hr/doc/27022018_-_izgradnja_drvene...
2201826.02.2018. - Prenamjena poljoprivrednog zemlj...http://mzoe.hr/doc/26022018_-_prenamjena_poljo...
3201821.02.2018. - Županijska razvojna strategija P...http://mzoe.hr/doc/21022018_-_zupanijska_razvo...
4201816.02.2018. - Autocesta A7 dionica između čvor...http://mzoe.hr/doc/16022018_-_autocesta_a7_dio...
5201816.02.2018. - Uzgajalište školjaka u Blacama, ...http://mzoe.hr/doc/16022018_-_uzgajaliste_skol...
6201813.02.2018. - Rekonstrukcija (nadogradnja i pr...http://mzoe.hr/doc/13022018_-_rekonstrukcija_n...
7201809.02.2018. - III. Izmjene i dopune Prostornog...http://mzoe.hr/doc/09022018_-_iii_izmjene_i_do...
8201806.02.2018. - Prenamjena poljoprivrednog zemlj...http://mzoe.hr/doc/06022018_-_prenamjena_poljo...
9201806.02.2018. - Transformatorska stanica KTS 10(...http://mzoe.hr/doc/06022018_-_transformatorska...
\n", "
" ], "text/plain": [ " 0 1 \\\n", "0 2018 02.03.2018. - Izgradnja peradarnika za uzgoj p... \n", "1 2018 27.02.2018. - Izgradnja drvene pješačke staze ... \n", "2 2018 26.02.2018. - Prenamjena poljoprivrednog zemlj... \n", "3 2018 21.02.2018. - Županijska razvojna strategija P... \n", "4 2018 16.02.2018. - Autocesta A7 dionica između čvor... \n", "5 2018 16.02.2018. - Uzgajalište školjaka u Blacama, ... \n", "6 2018 13.02.2018. - Rekonstrukcija (nadogradnja i pr... \n", "7 2018 09.02.2018. - III. Izmjene i dopune Prostornog... \n", "8 2018 06.02.2018. - Prenamjena poljoprivrednog zemlj... \n", "9 2018 06.02.2018. - Transformatorska stanica KTS 10(... \n", "\n", " 2 \n", "0 http://mzoe.hr/doc/02032018_-_izgradnja_perada... \n", "1 http://mzoe.hr/doc/27022018_-_izgradnja_drvene... \n", "2 http://mzoe.hr/doc/26022018_-_prenamjena_poljo... \n", "3 http://mzoe.hr/doc/21022018_-_zupanijska_razvo... \n", "4 http://mzoe.hr/doc/16022018_-_autocesta_a7_dio... \n", "5 http://mzoe.hr/doc/16022018_-_uzgajaliste_skol... \n", "6 http://mzoe.hr/doc/13022018_-_rekonstrukcija_n... \n", "7 http://mzoe.hr/doc/09022018_-_iii_izmjene_i_do... \n", "8 http://mzoe.hr/doc/06022018_-_prenamjena_poljo... \n", "9 http://mzoe.hr/doc/06022018_-_transformatorska... " ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prethodne_pd.head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## To do\n", "\n", " * Snimanje u .tsv tablice\n", " * Integracija u `puobot.py`\n", " * Twitter upload" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }