Skip to content
Extraits de code Groupes Projets
Valider 428e5f2e rédigé par Bastien Le Querrec's avatar Bastien Le Querrec
Parcourir les fichiers

utilise une base de code commune pour pref01, pref50 et pref73

parent 820ae2a1
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
import os
import re
import datetime
from Attrap_prefdpt import Attrap_prefdpt
from bs4 import BeautifulSoup
from urllib.parse import unquote
from Attrap import Attrap
class Attrap_pref01(Attrap):
class Attrap_pref01(Attrap_prefdpt):
# Config
hostname = 'https://www.ain.gouv.fr'
raa_page = f'{hostname}/Publications/Recueil-des-actes-administratifs-RAA'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0'
full_name = 'Ain'
short_code = 'pref01'
timezone = 'Europe/Paris'
def __init__(self, data_dir):
super().__init__(data_dir, self.user_agent)
self.set_sleep_time(30)
# La préfecture de l'Ain classe mal ses RAA : certains mois sont listés sur la page principale, certains arrêtés ont leur propre page sans être
# dans un RAA, et certains RAA ne sont pas classés dans une sous-page. Donc pour chaque page, on cherche les sous-pages d'années, puis les
# sous-pages de mois ou d'arrêtés perdues, puis les RAA aussi...
# La première page à parser est la page racine des RAA, qui contiendra des cartes d'années, des cartes de sous-pages de mois ou d'éléments mal
# catégorisés, et peut-être même des RAA
self.page_urls_to_parse = [self.raa_page]
self.elements = []
def get_raa(self, keywords):
while not self.page_urls_to_parse == []:
page_url = self.page_urls_to_parse[-1]
page_content = self.get_page(page_url, 'get').content # On récupère le HTML de la page
self.get_year_pages(page_content) # On cherche les cartes d'années
self.get_elements_pages(page_url) # On cherche les cartes d'éléments
for element in self.get_raa_elements(page_content): # On cherche les éléments
self.elements.append(element)
self.page_urls_to_parse.remove(page_url) # On supprime la page de la liste de celles à parser
self.parse_raa(self.elements[::-1], keywords)
self.mailer()
def get_year_pages(self, page_content):
for card in self.get_sub_pages(
page_content,
'div.fr-card.fr-card--sm.fr-card--grey.fr-enlarge-link div.fr-card__body div.fr-card__content h2.fr-card__title a', # Pages d'années
self.hostname,
False
):
date = Attrap.guess_date(card['name'].strip(), '(?:Recueil|Recueils) (?:des actes administratifs)(?:[ -])*([0-9]{4})').replace(day=1, month=1)
if date.year >= self.not_before.year:
self.page_urls_to_parse.append(card['url'])
def get_elements_pages(self, page_url):
print(page_url)
for card in self.get_sub_pages_with_pager(
page_url,
'div.fr-card.fr-card--horizontal.fr-card--sm.fr-enlarge-link div.fr-card__body div.fr-card__content h2.fr-card__title a.fr-card__link', # Carte avec un élément (mois ou arrêté seul)
'ul.fr-pagination__list li a.fr-pagination__link.fr-pagination__link--next.fr-pagination__link--lg-label', # Pager
'div.fr-card.fr-card--horizontal.fr-card--sm.fr-enlarge-link div.fr-card__body div.fr-card__content div.fr-card__end p.fr-card__detail', # Détails (avec la date de publication)
self.hostname
):
date = datetime.datetime.strptime(card['details'].replace('Publié le ', '').strip(), '%d/%m/%Y')
if date >= self.not_before:
self.page_urls_to_parse.append(card['url'])
def get_raa_elements(self, page_content):
elements = []
# On charge le parser
soup = BeautifulSoup(page_content, 'html.parser')
# On récupère chaque balise a
for a in soup.select('div.fr-downloads-group.fr-downloads-group--bordered ul li a,div a.fr-link.fr-link--download'):
if a.get('href') and a['href'].endswith('.pdf'):
if a['href'].startswith('/'):
url = f"{self.hostname}{a['href']}"
else:
url = a['href']
url = unquote(url)
name = a.find('span').previous_sibling.replace('Télécharger ', '').strip()
date = datetime.datetime.strptime(a.find('span').get_text().split(' - ')[-1].strip(), '%d/%m/%Y')
raa = Attrap.RAA(url, date, name, timezone=self.timezone)
elements.append(raa)
return elements
year_regex = '(?:Recueil|Recueils) (?:des actes administratifs)(?:[ -])*([0-9]{4})'
import os
import re
import datetime
from Attrap_prefdpt import Attrap_prefdpt
from bs4 import BeautifulSoup
from urllib.parse import unquote
from Attrap import Attrap
class Attrap_pref50(Attrap):
class Attrap_pref50(Attrap_prefdpt):
# Config
hostname = 'https://www.manche.gouv.fr'
raa_page = f'{hostname}/Publications/Recueil-des-actes-administratifs'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0'
full_name = 'Ain'
full_name = 'Manche'
short_code = 'pref50'
timezone = 'Europe/Paris'
def __init__(self, data_dir):
super().__init__(data_dir, self.user_agent)
self.set_sleep_time(30)
self.page_urls_to_parse = [self.raa_page]
self.elements = []
def get_raa(self, keywords):
while not self.page_urls_to_parse == []:
page_url = self.page_urls_to_parse[-1]
page_content = self.get_page(page_url, 'get').content # On récupère le HTML de la page
self.get_year_pages(page_content) # On cherche les cartes d'années
self.get_elements_pages(page_url) # On cherche les cartes d'éléments
for element in self.get_raa_elements(page_content): # On cherche les éléments
self.elements.append(element)
self.page_urls_to_parse.remove(page_url) # On supprime la page de la liste de celles à parser
self.parse_raa(self.elements[::-1], keywords)
self.mailer()
def get_year_pages(self, page_content):
for card in self.get_sub_pages(
page_content,
'div.fr-card.fr-card--sm.fr-card--grey.fr-enlarge-link div.fr-card__body div.fr-card__content h2.fr-card__title a', # Pages d'années
self.hostname,
False
):
date = Attrap.guess_date(card['name'].strip(), '([0-9]{4})').replace(day=1, month=1)
if date.year >= self.not_before.year:
self.page_urls_to_parse.append(card['url'])
def get_elements_pages(self, page_url):
print(page_url)
for card in self.get_sub_pages_with_pager(
page_url,
'div.fr-card.fr-card--horizontal.fr-card--sm.fr-enlarge-link div.fr-card__body div.fr-card__content h2.fr-card__title a.fr-card__link', # Carte avec un élément (mois ou arrêté seul)
'ul.fr-pagination__list li a.fr-pagination__link.fr-pagination__link--next.fr-pagination__link--lg-label', # Pager
'div.fr-card.fr-card--horizontal.fr-card--sm.fr-enlarge-link div.fr-card__body div.fr-card__content div.fr-card__end p.fr-card__detail', # Détails (avec la date de publication)
self.hostname
):
date = datetime.datetime.strptime(card['details'].replace('Publié le ', '').strip(), '%d/%m/%Y')
if date >= self.not_before:
self.page_urls_to_parse.append(card['url'])
def get_raa_elements(self, page_content):
elements = []
# On charge le parser
soup = BeautifulSoup(page_content, 'html.parser')
# On récupère chaque balise a
for a in soup.select('div.fr-downloads-group.fr-downloads-group--bordered ul li a,div a.fr-link.fr-link--download'):
if a.get('href') and a['href'].endswith('.pdf'):
if a['href'].startswith('/'):
url = f"{self.hostname}{a['href']}"
else:
url = a['href']
url = unquote(url)
name = a.find('span').previous_sibling.replace('Télécharger ', '').strip()
date = datetime.datetime.strptime(a.find('span').get_text().split(' - ')[-1].strip(), '%d/%m/%Y')
raa = Attrap.RAA(url, date, name, timezone=self.timezone)
elements.append(raa)
return elements
year_regex = '([0-9]{4})'
import os
import re
import datetime
from Attrap_prefdpt import Attrap_prefdpt
from bs4 import BeautifulSoup
from urllib.parse import unquote
from Attrap import Attrap
class Attrap_pref73(Attrap):
class Attrap_pref73(Attrap_prefdpt):
# Config
hostname = 'https://www.savoie.gouv.fr'
raa_page = f'{hostname}/Publications/Recueils-hebdomadaires-et-speciaux-des-actes-administratifs'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0'
full_name = 'Savoie'
short_code = 'pref73'
timezone = 'Europe/Paris'
def __init__(self, data_dir):
super().__init__(data_dir, self.user_agent)
self.set_sleep_time(30)
self.page_urls_to_parse = [self.raa_page]
self.elements = []
def get_raa(self, keywords):
while not self.page_urls_to_parse == []:
page_url = self.page_urls_to_parse[-1]
page_content = self.get_page(page_url, 'get').content # On récupère le HTML de la page
self.get_year_pages(page_content) # On cherche les cartes d'années
self.get_elements_pages(page_url) # On cherche les cartes d'éléments
for element in self.get_raa_elements(page_content): # On cherche les éléments
self.elements.append(element)
self.page_urls_to_parse.remove(page_url) # On supprime la page de la liste de celles à parser
self.parse_raa(self.elements[::-1], keywords)
self.mailer()
def get_year_pages(self, page_content):
for card in self.get_sub_pages(
page_content,
'div.fr-card.fr-card--sm.fr-card--grey.fr-enlarge-link div.fr-card__body div.fr-card__content h2.fr-card__title a', # Pages d'années
self.hostname,
False
):
date = Attrap.guess_date(card['name'].strip(), '([0-9]{4})').replace(day=1, month=1)
if date.year >= self.not_before.year:
self.page_urls_to_parse.append(card['url'])
def get_elements_pages(self, page_url):
print(page_url)
for card in self.get_sub_pages_with_pager(
page_url,
'div.fr-card.fr-card--horizontal.fr-card--sm.fr-enlarge-link div.fr-card__body div.fr-card__content h2.fr-card__title a.fr-card__link', # Carte avec un élément (mois ou arrêté seul)
'ul.fr-pagination__list li a.fr-pagination__link.fr-pagination__link--next.fr-pagination__link--lg-label', # Pager
'div.fr-card.fr-card--horizontal.fr-card--sm.fr-enlarge-link div.fr-card__body div.fr-card__content div.fr-card__end p.fr-card__detail', # Détails (avec la date de publication)
self.hostname
):
date = datetime.datetime.strptime(card['details'].replace('Publié le ', '').strip(), '%d/%m/%Y')
if date >= self.not_before:
self.page_urls_to_parse.append(card['url'])
def get_raa_elements(self, page_content):
elements = []
# On charge le parser
soup = BeautifulSoup(page_content, 'html.parser')
# On récupère chaque balise a
for a in soup.select('div.fr-downloads-group.fr-downloads-group--bordered ul li a,div a.fr-link.fr-link--download'):
if a.get('href') and a['href'].endswith('.pdf'):
if a['href'].startswith('/'):
url = f"{self.hostname}{a['href']}"
else:
url = a['href']
url = unquote(url)
name = a.find('span').previous_sibling.replace('Télécharger ', '').strip()
date = datetime.datetime.strptime(a.find('span').get_text().split(' - ')[-1].strip(), '%d/%m/%Y')
raa = Attrap.RAA(url, date, name, timezone=self.timezone)
elements.append(raa)
return elements
year_regex = '([0-9]{4})'
import datetime
from bs4 import BeautifulSoup
from urllib.parse import unquote
from Attrap import Attrap
class Attrap_prefdpt(Attrap):
# Config
user_agent = 'Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0'
year_regex = '([0-9]{4})'
def __init__(self, data_dir):
super().__init__(data_dir, self.user_agent)
self.set_sleep_time(30)
self.page_urls_to_parse = [self.raa_page]
self.elements = []
def get_raa(self, keywords):
while not self.page_urls_to_parse == []:
page_url = self.page_urls_to_parse[-1]
page_content = self.get_page(page_url, 'get').content # On récupère le HTML de la page
self.get_year_pages(page_content) # On cherche les cartes d'années
self.get_elements_pages(page_url) # On cherche les cartes d'éléments
for element in self.get_raa_elements(page_content): # On cherche les éléments
self.elements.append(element)
self.page_urls_to_parse.remove(page_url) # On supprime la page de la liste de celles à parser
self.parse_raa(self.elements[::-1], keywords)
self.mailer()
def get_year_pages(self, page_content):
for card in self.get_sub_pages(
page_content,
'div.fr-card.fr-card--sm.fr-card--grey.fr-enlarge-link div.fr-card__body div.fr-card__content h2.fr-card__title a', # Pages d'années
self.hostname,
False
):
date = Attrap.guess_date(card['name'].strip(), self.year_regex).replace(day=1, month=1)
if date.year >= self.not_before.year:
self.page_urls_to_parse.append(card['url'])
def get_elements_pages(self, page_url):
print(page_url)
for card in self.get_sub_pages_with_pager(
page_url,
'div.fr-card.fr-card--horizontal.fr-card--sm.fr-enlarge-link div.fr-card__body div.fr-card__content h2.fr-card__title a.fr-card__link', # Carte avec un élément (mois ou arrêté seul)
'ul.fr-pagination__list li a.fr-pagination__link.fr-pagination__link--next.fr-pagination__link--lg-label', # Pager
'div.fr-card.fr-card--horizontal.fr-card--sm.fr-enlarge-link div.fr-card__body div.fr-card__content div.fr-card__end p.fr-card__detail', # Détails (avec la date de publication)
self.hostname
):
date = datetime.datetime.strptime(card['details'].replace('Publié le ', '').strip(), '%d/%m/%Y')
if date >= self.not_before:
self.page_urls_to_parse.append(card['url'])
def get_raa_elements(self, page_content):
elements = []
# On charge le parser
soup = BeautifulSoup(page_content, 'html.parser')
# On récupère chaque balise a
for a in soup.select('div.fr-downloads-group.fr-downloads-group--bordered ul li a,div a.fr-link.fr-link--download'):
if a.get('href') and a['href'].endswith('.pdf'):
if a['href'].startswith('/'):
url = f"{self.hostname}{a['href']}"
else:
url = a['href']
url = unquote(url)
name = a.find('span').previous_sibling.replace('Télécharger ', '').strip()
date = datetime.datetime.strptime(a.find('span').get_text().split(' - ')[-1].strip(), '%d/%m/%Y')
raa = Attrap.RAA(url, date, name, timezone=self.timezone)
elements.append(raa)
return elements
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter