Skip to content
GitLab
Explorer
Connexion
Navigation principale
Rechercher ou aller à…
Projet
Attrap
Gestion
Activité
Membres
Labels
Programmation
Tickets
Tableaux des tickets
Jalons
Wiki
Code
Requêtes de fusion
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Compilation
Pipelines
Jobs
Planifications de pipeline
Artéfacts
Déploiement
Releases
Registre de paquets
Registre de conteneur
Opération
Modules Terraform
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté
Contribuer à GitLab
Donner votre avis
Conditions générales et politique de confidentialité
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Afficher davantage de fils d'Ariane
Joseki
Attrap
Comparer les révisions
main to 24ea416cb6a7e51a8e26e3b9550e8ad52cf082f1
Comparer les révisions
Les modifications sont affichées comme si la révision
source
était fusionnée avec la révision
cible
.
En savoir plus sur la comparaison des révisions.
Source
Joseki/Attrap
Sélectionner le projet cible
No results found
24ea416cb6a7e51a8e26e3b9550e8ad52cf082f1
Sélectionner une révision Git
Échanger
Cible
la-quadrature-du-net/Attrap
Sélectionner le projet cible
la-quadrature-du-net/Attrap
foggyfrog/Attrap
skhwiz/Attrap
precambrien/Attrap
ketsapiwiq/Attrap
Joseki/Attrap
kr1p/attrap-pref-12
kr1p/attrap-pref-46
kr1p/attrap-pi
Guinness/Attrap
astroidgritty/attrap-pref-84
davinov/Attrap
maettellite/attrap-pref-01
m242/Attrap
multi/Attrap
mverdeil/Attrap
olpo/Attrap
17 résultats
main
Sélectionner une révision Git
Afficher les modifications
Uniquement les modifications entrantes de la source
Inclure les modifications apportées à la cible depuis la création de la source
Comparer
Validations sur la source (1)
update cli.py,Makefile,comment old years pager crawling
· 24ea416c
kr1p
a rédigé
Il y a 10 mois
24ea416c
Masquer les modifications d'espaces
En ligne
Côte à côte
Affichage de
3 fichiers modifiés
Attrap_pref47.py
+123
-0
123 ajouts, 0 suppression
Attrap_pref47.py
Makefile
+3
-1
3 ajouts, 1 suppression
Makefile
cli.py
+1
-0
1 ajout, 0 suppression
cli.py
avec
127 ajouts
et
1 suppression
Attrap_pref47.py
0 → 100644
Voir le fichier @
24ea416c
import
os
import
datetime
from
bs4
import
BeautifulSoup
from
urllib.parse
import
unquote
from
Attrap
import
Attrap
class
Attrap_pref47
(
Attrap
):
# Config
__HOST
=
'
https://www.lot-et-garonne.gouv.fr
'
__RAA_PAGE
=
f
'
{
__HOST
}
/Publications/Publications-legales/RAA
'
__USER_AGENT
=
'
Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
'
full_name
=
'
Préfecture du Lot-et-garonne
'
short_code
=
'
pref47
'
def
__init__
(
self
,
data_dir
):
super
().
__init__
(
data_dir
,
self
.
__USER_AGENT
)
self
.
enable_tor
(
10
)
self
.
not_before
=
datetime
.
datetime
(
2020
,
1
,
1
)
# annee de differenciation pager
#supercharge pour classes css avec whitespaces
def
get_sub_pages_with_pager
(
self
,
page
,
sub_page_element
,
pager_element
,
details_element
,
host
):
pages
=
[]
page_content
=
self
.
get_page
(
page
,
'
get
'
).
content
# On initialise le parser
soup
=
BeautifulSoup
(
page_content
,
'
html.parser
'
)
# On recherche les sous-pages
sub_pages
=
soup
.
select
(
sub_page_element
)
sub_pages_details
=
None
if
details_element
is
not
None
:
sub_pages_details
=
soup
.
select
(
details_element
)
i
=
0
for
sub_page
in
sub_pages
:
print
(
sub_page
)
if
sub_page
.
get
(
'
href
'
):
page
=
{
'
url
'
:
f
"
{
host
}{
sub_page
[
'
href
'
]
}
"
,
'
name
'
:
sub_page
.
get_text
().
strip
(),
'
details
'
:
''
}
if
details_element
is
not
None
:
page
[
'
details
'
]
=
sub_pages_details
[
i
].
get_text
().
strip
()
pages
.
append
(
page
)
i
=
i
+
1
# On recherche un pager, et si on le trouve on le suit
# modif ici, le parametre pager_element ne doit contenir
# que le contenu de la classe
# et pas l'element pour les classes avec whitespaces
pager
=
soup
.
find_all
(
"
a
"
,
class_
=
pager_element
)
print
(
pager
)
if
pager
and
len
(
pager
)
>
0
and
pager
[
0
].
get
(
'
href
'
):
for
sub_page
in
self
.
get_sub_pages_with_pager
(
f
"
{
host
}{
pager
[
0
][
'
href
'
]
}
"
,
sub_page_element
,
pager_element
,
details_element
,
host
):
pages
.
append
(
sub_page
)
return
pages
def
get_raa
(
self
,
keywords
):
elements
=
[]
page_content
=
self
.
get_page
(
self
.
__RAA_PAGE
,
'
get
'
).
content
soup
=
BeautifulSoup
(
page_content
,
'
html.parser
'
)
for
a
in
soup
.
select
(
'
div.fr-card__body div.fr-card__content h2.fr-card__title a
'
):
# Annees sans pager
if
Attrap
.
guess_date
(
f
'
{
self
.
__HOST
}{
a
.
get_text
().
strip
()
}
'
,
'
([0-9]{4}).*
'
).
year
>=
self
.
not_before
.
year
:
page_content
=
self
.
get_page
(
f
"
{
self
.
__HOST
}{
a
[
'
href
'
]
}
"
,
'
get
'
).
content
for
sub_page
in
self
.
get_sub_pages
(
page_content
,
'
div.fr-card__body div.fr-card__content h2.fr-card__title a
'
,
self
.
__HOST
,
True
):
sub_page_content
=
self
.
get_page
(
sub_page
[
'
url
'
],
'
get
'
).
content
for
element
in
self
.
get_raa_elements
(
sub_page_content
):
elements
.
append
(
element
)
#les raa de 2019 et années précédentes ont des pagers
#else:
# page_content = self.get_page(f"{self.__HOST}{a['href']}", 'get').content
# for sub_page in self.get_sub_pages_with_pager(f"{self.__HOST}{a['href']}", 'div.fr-card__body div.fr-card__content h2.fr-card__title a', 'a.fr-pagination__link fr-pagination__link--next fr-pagination__link--lg-label', None, self.__HOST):
# sub_page_content = self.get_page(sub_page['url'], 'get').content
# for element in self.get_raa_elements(sub_page_content):
# elements.append(element)
#bug sur ocrmypdf sur mon ubuntu 20.04 (test avec arch prochainement)
#sur --invalidate-digital-signatures bien que dans la doc
#ici https://ocrmypdf.readthedocs.io/en/latest/pdfsecurity.html
self
.
parse_raa
(
elements
,
keywords
)
self
.
mailer
()
def
get_raa_elements
(
self
,
page_content
):
elements
=
[]
# On charge le parser
soup
=
BeautifulSoup
(
page_content
,
'
html.parser
'
)
# Pour chaque balise a, on regarde si c'est un PDF, et si oui on le
# parse
print
(
soup
.
find_all
(
"
a
"
,{
"
id
"
:
'
class=
"
fr-link
'
}))
print
(
len
(
soup
.
find_all
(
"
a
"
,{
"
id
"
:
'
class=
"
fr-link
'
})))
for
a
in
soup
.
find_all
(
"
a
"
,{
"
id
"
:
'
class=
"
fr-link
'
}):
if
a
.
get
(
'
href
'
)
and
a
[
'
href
'
].
endswith
(
'
.pdf
'
):
if
a
[
'
href
'
].
startswith
(
'
/
'
):
url
=
f
"
{
self
.
__HOST
}{
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
)
self
.
download_file
(
raa
)
elements
.
append
(
raa
)
print
(
elements
)
return
elements
Ce diff est replié.
Cliquez pour l'agrandir.
Makefile
Voir le fichier @
24ea416c
make
:
ppparis pref04 pref05 pref06 pref09 pref13 pref31 pref33 pref34 pref35 pref38 pref42 pref44 pref59 pref62 pref63 pref64 pref65 pref66 pref69 pref80 pref81 pref83 pref87 pref93 pref976
make
:
ppparis pref04 pref05 pref06 pref09 pref13 pref31 pref33 pref34 pref35 pref38 pref42 pref44
pref47
pref59 pref62 pref63 pref64 pref65 pref66 pref69 pref80 pref81 pref83 pref87 pref93 pref976
ppparis
:
bin/python3 cli.py ppparis
pref04
:
...
...
@@ -25,6 +25,8 @@ pref42:
bin/python3 cli.py pref42
pref44
:
bin/python3 cli.py pref44
pref47
:
bin/python3 cli.py pref47
pref59
:
bin/python3 cli.py pref59
pref62
:
...
...
Ce diff est replié.
Cliquez pour l'agrandir.
cli.py
Voir le fichier @
24ea416c
...
...
@@ -52,6 +52,7 @@ available_administrations = [
'
pref38
'
,
'
pref42
'
,
'
pref44
'
,
'
pref47
'
,
'
pref59
'
,
'
pref62
'
,
'
pref63
'
,
...
...
Ce diff est replié.
Cliquez pour l'agrandir.