#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon Nov 5 20:55:36 2018 @author: suwako """ import requests import re # Variables api = "https://master.apis.dev.openstreetmap.org/" # Testing, it should be replaced by https://api.openstreetmap.org/ when the program is finished def runfetch(url='https://www.legifrance.gouv.fr/eli/arrete/2018/10/12/PRMD1824595A/jo/texte'): session = requests.Session() req1 = session.get(url) # Get the source code text = req1.text.split('\n') # Parse the HTML source code text = ['\n'.join(row.split('\n')[:row.split('\n').index(""):]) for row in '\n'.join(text[text.index('
ANNEXES
ANNEXE I

'):text.index('
Annexe
'):]).split('')[2::]] diclist = [] for row in text: cols = [text.split('\n')[2][5::] if len(text.split('\n')) == 3 else "" for text in row.split("", "\n", diclist[index][element]) # Replace
,
and
by \n # Make a the area for area in diclist: # Case insensitive area["zone"] = area["zone"].lower() # Multiple polygons if "polygones" in area["zone"]: lst = [] tmp = re.compile(".*zone.*").split(area["zone"]) # List of polygons del tmp[0] print(tmp) for polygon in tmp: lst.append(re.findall(".{0,35} ?:? ?.? ?: ?(\d{1,3}° \d{2}(?:'|′) \d{2},?\d{0,3}(?:\"|”|\'\') .) ?\/ ?(\d{1,3}° \d{2}(?:'|′|\'\') \d{2},?\d{0,3}(?:\"|”) .)", polygon)) area["zone"] = [] for index, polygon in enumerate(lst): area["zone"].append([]) for index2, coords in enumerate(polygon): area["zone"][index].append([]) for index3, point in enumerate(coords): area["zone"][index][index2].append(dms2dd(point)) # area["zone"][index][index2][index3] = dms2dd(point) del lst del tmp # Polygons elif "polygone" in area["zone"]: lst = [] lst.append(re.findall(".{0,35} ?:? ?.? ?: ?(\d{1,3}° \d{2}(?:'|′) \d{2},?\d{0,3}(?:\"|”|\'\') ?.) ?\/ ?(\d{1,3}° \d{2}(?:'|′|\'\') \d{2},?\d{0,3}(?:\"|”|\'\') ?.)", area["zone"])) area["zone"] = [] for index, polygon in enumerate(lst): area["zone"].append([]) for index2, coords in enumerate(polygon): area["zone"][index].append([]) for index3, point in enumerate(coords): area["zone"][index][index2].append([]) area["zone"][index][index2][index3] = dms2dd(point) del lst # Circles elif "cercle" in area["zone"]: lst = [()] lst[0] = re.search(r"(.{6}) .{0,5}?(\d{1,3},?\d{0,2} ?.{1,2}) .{1,35} ?(\d{3}° \d{1,2}' \d{1,2}” .) ?\/ ?(\d{1,3}° \d{1,2}' \d{1,2}” .)", area["zone"], re.S).groups() area["zone"] = lst del lst # Atolls elif area["zone"].strip() == "atolls et eaux territoriales incluses": area["zone"] = [("cercle", "35KM", "138.9022", "21.82917"), ("cercle", "27KM", "138.7425", "22.23528A")] return diclist if __name__ == '__main__': diclist = fetch() # Fetch all the data from a french article # Print the dict (keep this code in the end of the file) print("===== Dict =====") for index, area in enumerate(diclist): print(f"\n-------------{index}----------------\n") for element in area: print(f" {element}: {diclist[index][element]}") print("\n")