Ce script récupère les annonces immobilières de plusieurs sites français : Se Loger, Le Bon Coin, de Particulier à Particulier et Logic Immo.
Il est basé sur le script Un toit pour caramel créé par Axel Leroy lui même inspiré par VikParuchuri/apartment-finder qui récupère les annonces immoblières pour les aggréger dans un tableau Trello.
Ce projet reprend une grosse partie du code de Un toit pour caramel et l'adapte pour en faciliter l'usage de manière plus générale (#UnToitPourCaramel étant focalisé sur l'import des annonces dans un tableau Trello). La documentation ci-dessous est en grande partie reprise depuis le très complet fichier original.
- Python 3
- peewee
- Requests
- BeautifulSoup4
- lxml
Les paramètres de recherce communs à tous les services sont dans le fichier
parameters.json
qu'il faut créer avant d'utiliser le programme :
{
"ad-providers": ["leboncoin", "logic-immo"],
"cities":
[
["Nanterre", 92000, 920050],
["Rueil-Malmaison", 92500, 920063]
],
"price": [200, 900],
"surface": [30, 70],
"rooms": [2, 5],
"bedrooms": [1, 2],
"leboncoin": {
"c": 10,
"f": "p",
"ret": [1, 2],
"q": "terasse"
},
"seloger": {
"idtt": 1,
"idtypebien": "1,2",
"getDtCreationMax": 1
},
"pap": {
"recherche[produit]": "location",
"recherche[typesbien][]": "appartement",
"order": "date-desc"
},
"logic-immo": {
"domain": "rentals",
"order": "date-desc"
}
}
Les paramètres sont donc :
ad-providers
spécifie les fournisseurs d'annonces selectionnées :- logic_immo : www.logic-immo.com
- seloger : www.seloger.com
- leboncoin : www.leboncoin.com
- pap : www.pap.fr
cities
contient les villes, avec leur nom, code postal puis le code INSEE utilisé par SeLoger,price
,surface
,rooms
etbedrooms
sont donc respectivement le prix, la surface, le nombre de pièces et le nombre de chambres avec les bornes minimales et maximales,leboncoin
contient les paramètres propres à LeBonCoin :c
représente la catégorie des annonces :9
pour les ventes immobilières,10
pour les locations,11
pour les collocations.
ret
permet de filtrer le type de bien : (optionnel)1
pour les maisons,2
pour les appartements,3
pour les terrains,4
pour les parkings,5
pour les autres.
f
permet de filtrer le type d'annonceur : (optionnel)p
pour les particuliersc
pour les professionnels
furn
permet de choisir si un bien est meublé1
ou non2
. (optionnel)q
représente le contenu du champ de recherche. (optionnel)
seloger
contient les paramètres propres à SeLoger :idtt
représente la catégorie des annonces :1
pour les locations,2
pour les ventes.
idtypebien
représente le type de bien : (optionnel)1
pour les appartements,2
pour les maisons et villas,3
pour les parkings et boxs,4
pour les terrains,6
pour les boutiques,7
pour les locaux,8
pour les bureaux,9
pour les lofts et ateliers.
getDtCreationMax=1
est requis par l'API.
pap
contient les paramètres propres à PAP :recherche[produit]
permet de préciser si l'on cherche unelocation
ou unevente
,recherche[typesbien][]
permet de préciser le type de bien cherché.recherche[tags][]
permet de renseigner des critères avancés : (optionnel)meuble
etvide
longue-duree
etcourte-duree
duplex-triplex
plain-pied
etdernier-etage
piscine
balcon-terrasse
garages-parking
acces-handicape
logic-immo
contient les paramètres propres à Logic Immo :domain
permet de préciser si l'on cherche un bien en location (rentals
) ou en vente (sales
)
Les paramètres restants de chaque service peuvent être facilement obtenus à partir processus d'ingénierie inversée.
Testé sur un Raspberry Pi sous Raspbian Jessie.
- Installer
python3-pip
etpython3-lxml
(en plus de Python 3)sudo apt install python3-pip python3-lxml -y
- Installer les dépendances
sudo pip3 install peewee requests requests_oauthlib pytz python-dateutil beautifulsoup4
- Clonner le projet
git clone https://github.com/axeleroy/untoitpourcaramel.git
- Créer une tâche
cron
pour lancer ce script régulièrement (dans mon cas toutes les 2h)crontab -e
0 */2 * * * python3 /home/pi/untoitpourcaramel/main.py
Puisque les sites exploités ne proposent pas publiquement d'API permettant de récupérer les annonces, l'auteur du script original a étudié les requêtes effectuées et les réponses reçues par les applications Android de ces sites à l'aide de Packet Capture.
Une fois Packet Capture installé et configuré, il n'y a plus qu'à lancer les applications, effectuer une première recherche avec tous les critères possibles afin d'identifier la requête et les critères ; et une seconde qui retourne au moins deux résultats pour pouvoir étudier l'objet retourné par l'API.
Avec cette méthodologie on peut déterminer comment interroger le service avec les critères que l'on souhaite et quelles réponses il renvoit.
La procédure est ensuite répétée pour obtenir le contenu des annonces. Les requêtes et les réponses sont situées
dans le dossier sample-requests
pour votre analyse (et pour tirer partie des paramètres propres à chaque service).
- annonce :
- rep.xml / rep.json : Corps de la réponse contenant l'annonce
- req.log : En-têtes de la requête pour obtenir l'annonce
- recherche :
- rep.xml / rep.json : Corps de la réponse contenant les résultats de la recheche
- req.full.log : En-têtes de la requête de recherche avec tous les paramètres proposés par l'application
- req.norm.log : En-têtes de la requête d'une recherche dans un cas d'utilisation normale