How to Scrape Seloger.com - Real Estate Listing Data

How to Scrape Seloger.com - Real Estate Listing Data

Seloger.com is one of the most popular websites for real estate ads in France. However, web scraping Seloger can be challenging as it's a highly protected website.

In this article, we'll explore how to scrape and bypass seloger.com web scraping blocking. For scraping itself we'll focus on how to scrape real estate data through search and individual listing pages. Let's dig in!

Latest Seloger.fr Scraper Code

https://github.com/scrapfly/scrapfly-scrapers/

Why Scrape Seloger.com

Scraping Seloger.com can be a powerful tool for accessing real estate data for:

  • Market Research
    Buyers and investors can get valuable insights that help make decisions by tracking and analyzing listing prices and data over time.

  • Comprehensive Property Listing
    Scraping seloger.com allows for acquiring various property listings, including apartments, houses, and commercial spaces.

  • Automated property data updates
    Scraping data from Seloger.com allows both buyers and sellers to remain up-to-date on the real estate market.

  • Property valuation
    For homeowners looking to sell, Seloger.com scraping can provide insights into property valuations and help set competitive prices.

Now we have an overview of how seloger.com web scraping can be helpful. Let's take a look at the tools we'll use.

Project Setup

To scrape seloger we'll need Python with the following libraries:

  • scrapfly-sdk - A Python SDK for a web scraping API that allows for scraping at scale without getting blocked.
  • parsel - An HTML parsing library that's used by ScrapFly under the hood.
  • asyncio - A library that allows for running web scrapers asynchronously.

Python already includes asyncio and to install scrapfly-sdk and parsel the following pip command can be used:

pip install scrapfly-sdk parsel

Bypass Seloger.com Scraping Blocking Wtih ScrapFly

Seloger.com uses anti-scraping challenges preventing bots such as web scrapers from accessing the website. For example, let's try to scrape seloger.com using a simple Playwright headless browser:

from playwright.sync_api import sync_playwright

with sync_playwright() as playwight:
    # Lanuch a chrome browser
    browser = playwight.chromium.launch(headless=False)
    # Open a new headless browser page
    page = browser.new_page()
    # Go to seloger.com
    page.goto("https://www.seloger.com/immobilier/achat/immo-bordeaux-33/bien-appartement/")
    # Take a screenshot
    page.screenshot(path="screenshot.png")

The website detected our headless browser as a bot, requiring us to solve a challenge:

Seloger.com web scraping blocking
Seloger.com web scraping blocking

To bypass this seloger.com web scraping detection Scrapfly can lend a hand!

scrapfly middleware

ScrapFly provides web scraping, screenshot, and extraction APIs for data collection at scale.

For example, by using the Scrapfly's asp feature with the ScrapFly Python SDK. We can easily avoid seloger.com blocking:

from scrapfly import ScrapeConfig, ScrapflyClient, ScrapeApiResponse

scrapfly = ScrapflyClient(key="Your ScrapFly API key")

api_response: ScrapeApiResponse = scrapfly.scrape(
    ScrapeConfig(
        url="https://www.seloger.com/immobilier/achat/immo-bordeaux-33/bien-appartement/",
        # Cloud headless browser similar to Playwright
        render_js=True,
        # Bypass anti scraping protection
        asp=True,
        # Set the geographical location to France
        country="FR",
    )
)
# Print the website's status code
print(api_response.upstream_status_code)
"200"

Now that we can bypass seloger.com web scraping blocking, let's use ScrapFly to scrape real estate data.

In this section, we'll create a seloger.com scraper to scrape search pages like this one:

seloger.com/immobilier/achat/immo-bordeaux-33/bien-appartement/?LISTING-LISTpg=1

Which should look similar to this:

Seloger.com search page
Seloger.com search page

The first thing we can see is that this search page supports pagination through LISTING-LISTpg URL parameter (seen at the end of the URL):

https://www.seloger.com/immobilier/achat/immo-bordeaux-33/bien-appartement/?LISTING-LISTpg=1

If we inspect the above page using developer tools, we'll find the search data under a script tag:

Seloger.com search data in the HTML
hidden data as seen in Seloger page source

The above script tag contains all the HTML card data encoded as JSON strings. To scrape seloger.com search data, we'll select this tag from the HTML and decode the inside JSON data:

from scrapfly import ScrapeConfig, ScrapflyClient, ScrapeApiResponse
import asyncio
from typing import Dict, List
import json

SCRAPFLY = ScrapflyClient(key="Your API key")

# scrapfly config
BASE_CONFIG = {
    # bypass web scraping blocking
    "asp": True,
    # set the proxy location to France
    "country": "fr",
}

def parse_search(result: ScrapeApiResponse):
    """parse property listing data from seloger search pages"""
    # select the script tag from the HTML
    script_jsons = result.selector.xpath("//script[contains(., 'window[\"initialData\"]')]/text()").re(
        r'JSON.parse\("(.+?)"\)'
    )
    # decode the JSON data
    datasets = [json.loads(script_json.encode("utf-8").decode("unicode_escape")) for script_json in script_jsons]
    cards = []
    # validate the cards data to avoid advertisement cards
    for card in datasets[0]["cards"]["list"]:
        if card["cardType"] == "classified":
            cards.append(card)
    search_meta = datasets[0]["navigation"]
    return {"results": cards, "search": search_meta}

async def scrape_search(url: str) -> List[Dict]:
    """scrape seloger search pages"""
    print(f"scraping search page {url}")
    # scrape the first page first
    first_page = await SCRAPFLY.async_scrape(ScrapeConfig(url, **BASE_CONFIG))
    search_page_result = parse_search(first_page)
    # extract the property listing data
    search_data = search_page_result["results"]
    # print the result in JSON format
    print(json.dumps(search_data, indent=2))

# run the scraping search function
asyncio.run(
    scrape_search(
        url="https://www.seloger.com/immobilier/achat/immo-bordeaux-33/bien-appartement/"
    )
)

Here, we use the parse_searchfunction to select the script tag from the HTML and decode the inside JSON objects. Then, we iterate through card data to filter out advertisement cards and only select listing cards. Next, we use the scrape_search function to scrape the first search page using ScrapFly. Finally, we run the code using asyncio.

The above seloger.com scraper can scrape the first search page only. Let's modify it to scrape the remaining search pages:

from scrapfly import ScrapeConfig, ScrapflyClient, ScrapeApiResponse
import asyncio
from typing import Dict, List
import json

SCRAPFLY = ScrapflyClient(key="Your API key")

# scrapfly config
BASE_CONFIG = {
    # bypass web scraping blocking
    "asp": True,
    # set the proxy location to France
    "country": "fr",
}

def parse_search(result: ScrapeApiResponse):
    """parse property listing data from seloger search pages"""
    # select the script tag from the HTML
    script_jsons = result.selector.xpath("//script[contains(., 'window[\"initialData\"]')]/text()").re(
        r'JSON.parse\("(.+?)"\)'
    )
    # decode the JSON data
    datasets = [json.loads(script_json.encode("utf-8").decode("unicode_escape")) for script_json in script_jsons]
    cards = []
    # validate the cards data to avoid advertisement cards
    for card in datasets[0]["cards"]["list"]:
        if card["cardType"] == "classified":
            cards.append(card)
    search_meta = datasets[0]["navigation"]
    return {"results": cards, "search": search_meta}

def _max_search_pages(search_meta: Dict) -> int:
    """get the maximum number of pages available on the search"""
    return search_meta["counts"]["count"] // search_meta["pagination"]["resultsPerPage"]

async def scrape_search(url: str, max_pages: int) -> List[Dict]:
    """scrape seloger search pages"""
    print(f"scraping search page {url}")
    # scrape the first page first
    first_page = await SCRAPFLY.async_scrape(ScrapeConfig(url, **BASE_CONFIG))
    search_page_result = parse_search(first_page)
    # extract the property listing data
    search_data = search_page_result["results"]
    # get the max search pages number
    total_search_pages = _max_search_pages(search_page_result["search"])
    # set the max_pages parameter to the maximum available pages if the max_pages exceeds it
    if max_pages > total_search_pages:
        max_pages = total_search_pages
    # add the ramaining pages in a scraping list
    _other_pages = [
        ScrapeConfig(f"{first_page.context['url']}?LISTING-LISTpg={page}", **BASE_CONFIG)
        for page in range(2, max_pages + 1)
    ]
    # scrape the remaining pages concurrently
    async for result in SCRAPFLY.concurrent_scrape(_other_pages):
        page_data = parse_search(result)["results"]
        search_data.extend(page_data)
    # print the result in JSON format
    print(json.dumps(search_data, indent=2))

# run the scraping search function
asyncio.run(
    scrape_search(
        url="https://www.seloger.com/immobilier/achat/immo-bordeaux-33/bien-appartement/",
        max_pages=2
    )
)

Here, we use the _max_search_pages function to get the maximum search pages available and use its value if the max_pages parameter exceeds it. Then, we add the remaining search pages to a scraping list and scrape them concurrently using ScrapFly.

The result is a list of property ads found in two pages of search, similar to this:

Example output
[
    {
      "id": 207269613,
      "cardType": "classified",
      "publicationId": 30453705,
      "highlightingLevel": 3,
      "businessUnit": 1,
      "photosQty": 24,
      "photos": [
        "/0/a/4/p/0a4p3lsrvjjiwhdrs4y8anegdnya1dd1l9rmo9ork.jpg",
        "/0/7/7/5/0775gskojkfc01v4okv9shiziwx5i504zsohzyl6o.jpg",
        "/0/b/c/l/0bclog46ivfg8p4qno9u2biq085anawhhuepe5di8.jpg",
        "/0/m/g/w/0mgw854voc8ixmm6cco4x8kxk4gcb5wgzf1x1ag80.jpg",
        "/0/o/9/u/0o9ugz73n6icig10snlowdiez4a1p6pjdzhjvrgdm.jpg"
      ],
      "title": "Appartement",
      "estateType": "Appartement",
      "estateTypeId": 1,
      "transactionTypeId": 2,
      "nature": 1,
      "pricing": {
        "squareMeterPrice": "3 079 €",
        "rawPrice": "311000",
        "priceNote": null,
        "price": "311 000 €",
        "monthlyPrice": 1735,
        "lifetime": false
      },
      "contact": {
        "agencyId": 453705,
        "agencyPage": "/professionnels/agences-immobilieres/bordeaux-33000/agence-75763/",
        "isPrivateSeller": false,
        "contactName": "MANSON PROPERTIES",
        "imgUrl": "https://v.seloger.com/s/width/150/logos/0/d/1/b/0d1b0knhcgd20acjg3ai03v5gcjye7row9yexw6be.jpg",
        "phoneNumber": "06 82 32 26 68",
        "email": "true",
        "agencyLink": "http://www.manson-properties.com/"
      },
      "tags": [
        "4 pièces",
        "3 chambres",
        "101 m²",
        "Étage 1/5",
        "Terrasse",
        "Jardin",
        "Parking"
      ],
      "isExclusive": false,
      "cityLabel": "Bordeaux",
      "districtLabel": "Grand Parc-Chartrons-Paul Doumer",
      "zipCode": "33200",
      "description": "Appartement à vendre - Manson Properties vous présente en exclusivité cet appartement de Type 4 au premier étage avec ascenseur de 101m2 avec Balcons + Parking et Cave dans une résidence de standing bien entretenue et sécurisée.\r\nIl est composé de 4 pièces :une grande entrée avec placard, une cuisine séparée équipée et aménagée donnant sur un balcon exposé Ouest et un cellier, buanderie indépendant.\r\nLe séjour de 26m2 donnant sur un balcon de +7m2 exposé Est très lumineux est complété par 3 chambres de plus de 11 m2 avec grands placards, ainsi qu'une salle d'eau, une salle de bains et un W.C [...]",
      "videoURL": null,
      "virtualVisitURL": "https://youtu.be/sksNHRAUeUA?feature=shared",
      "housingBatch": [],
      "classifiedURL": "/annonces/achat/appartement/bordeaux-33/grand-parc-chartrons-paul-doumer/207269613.htm",
      "rooms": 4,
      "surface": 101,
      "optionalCriteria": [],
      "missingOptionalCriteria": [],
      "transport": null,
      "earlyAccess": null,
      "forcedIntermediary": false,
      "isNew": false,
      "epc": "D",
      "partnerLinkType": 1,
      "position": 0
    }
]

Our seloger.com scraper successfully scraped all the search data. However, the property pages themselves contain more listing information — let's scrape the rest!

How to Scrape Seloger Property Listings?

Similar to the search pages, we can find the property pages data under script tags. However, the data itself isn't encoded:

property page data in the HTML
hidden data as seen in Seloger property page source

To scrape seloger.com property pages, we'll extract the data directly from the script tag with the __NEXT_DATA__ id:

from scrapfly import ScrapeConfig, ScrapflyClient, ScrapeApiResponse
import asyncio
from typing import Dict
import json

SCRAPFLY = ScrapflyClient(key="Your API key")

# scrapfly config
BASE_CONFIG = {
    # bypass web scraping blocking
    "asp": True,
    # set the proxy location to France
    "country": "fr",
}

def parse_property_page(result: ScrapeApiResponse):
    """parse property data from the nextjs cache"""
    # select the script tag from the HTML
    next_data = result.selector.css("script[id='__NEXT_DATA__']::text").get()
    listing_data = json.loads(next_data)["props"]["pageProps"]["listingData"]
    # extract property data from the property page
    property_data = {}
    property_data["listing"] = listing_data["listing"]
    property_data["agency"] = listing_data["agency"]
    return property_data

async def scrape_property(url: str) -> Dict:
    """scrape seloger property page"""
    result = await SCRAPFLY.async_scrape(ScrapeConfig(url, **BASE_CONFIG))
    property_data = parse_property_page(result)
    # print the result in JSON format
    print(json.dumps(search_data, indent=2))

# run the scraping search function
asyncio.run(
    scrape_property(
        url="https://www.seloger.com/annonces/achat-de-prestige/appartement/bordeaux-33/saint-bruno-saint-augustin/215096735.htm",
    )
)

Similar to what we did earlier, we use the parse_property function to parse the property data from the HTML. Then, we use the scrape_property function to scrape the page using ScrapFly. Here is the result we got:

Output
{
  "listing": {
    "listingDetail": {
      "id": 207269613,
      "transactionTypeId": 2,
      "transactionType": "vente",
      "propertyTypeId": 1,
      "propertyType": "Appartement",
      "propertySubTypeId": null,
      "propertySubType": null,
      "propertyNatureId": 1,
      "publicationTypeIdSl": 50,
      "publicationTypeId": 1,
      "publicationId": 30453705,
      "address": {
        "city": "Bordeaux",
        "superCity": null,
        "postalCode": "33200",
        "street": null,
        "district": "Grand Parc-Chartrons-Paul Doumer",
        "countryId": 250,
        "divisionId": 2229
      },
      "reference": "VA2467-MANSONPROPERT",
      "descriptive": "Manson Properties vous présente en exclusivité cet appartement de Type 4 au premier étage avec ascenseur de 101m2 avec Balcons + Parking et Cave dans une résidence de standing bien entretenue et sécurisée.\r\nIl est composé de 4 pièces :une grande entrée avec placard, une cuisine séparée équipée et aménagée donnant sur un balcon exposé Ouest et un cellier, buanderie indépendant.\r\nLe séjour de 26m2 donnant sur un balcon de +7m2 exposé Est très lumineux est complété par 3 chambres de plus de 11 m2 avec grands placards, ainsi qu'une salle d'eau, une salle de bains et un W.C indépendant.\r\n\r\nATOUT BUDGET :appartement entièrement rénové AVEC GOUT en 2019, SANS TRAVAUX:BAISSE DE PRIX( moins 14000 euros): 3079 euros/M2 A CAUDERAN POUR 3912 euros/M2 EN MOYENNE.\r\nLes fenêtres sont en aluminium double vitrage, le chauffage est individuel électrique et une place de parking privative ainsi qu'une cave complètent ce bien.\r\nVous serez à 3 min de la gare de Caudéran, et profiterez à proximité immédiate de supermarchés et de commerces alimentaires .\r\nle prix de vente est de 311000 euros à charge acquéreur honoraires inclus et de 300000 euros honoraires exclus.\r\nBien vendu soumis au statut de la copropriété.80 lots, charges2000 euros (prévisionnel),pas de procédure en cours, consommation annuelle d'énergie entre 1790 euros et 2470 euros.\r\nPour tous renseignements complémentaires, veuillez contacter jean Christophe Marcou ,agent commercial du réseau MANSON PROPERTIES, au inscrit au RSAC de Bordeaux n° 502 387 582.\r\nHonoraires inclus de 3.67% TTC à la charge de l'acquéreur. Prix hors honoraires 300 000 euros. Dans une copropriété de 80 lots. Aucune procédure n'est en cours. Classe énergie E, Classe climat B Montant moyen estimé des dépenses annuelles d'énergie pour un usage standard, établi à partir des prix de l'énergie de l'année 2000 : entre 1790.00 et 2470.00 euros. Ce bien vous est proposé par un agent commercial. \r\n\r\nVotre conseiller Manson Properties : Jean-Christophe Marcou - \r\nAgent commercial (Entreprise individuelle) \r\n RSAC 502387582 \r\n RCP AMRCP200241\r\nAgence MANSON PROPERTIES Bordeaux, Bassin d'Arcachon & Bretagne, SAS au capital de 33 467 euros, siège social : 6 quai Louis XVIII – 33000 BORDEAUX, immatriculée au RCS Bordeaux sous le n° 892 572 413, titulaire de la carte professionnelle « Transactions sur immeubles et fonds de commerce » n° CPI33012021000000005 délivrée par CCI Bordeaux Gironde.\r\nLes informations sur les risques auxquels ce bien est exposé sont disponibles sur le site Géorisques :",
      "roomCount": 4,
      "bedroomCount": 3,
      "surface": 101,
      "surfaceUnit": "m²",
      "isExclusiveSalesMandate": false,
      "isRentChargesIncluded": null,
      "listingPrice": {
        "price": 311000,
        "priceInformation": null,
        "priceUnit": "€",
        "lifeAnnuityPrice": null,
        "pricePerSquareMeter": 3079,
        "priceRange": null,
        "hasPriceRange": false,
        "priceEvolutionTrend": -1,
        "monthlyPayment": 1735,
        "alur": {
          "siHonoraireChargeVendeur": false,
          "siHonoraireChargeAcquereur": true,
          "pourcentagesHonoraires": 3.67,
          "prixHorsHonoraires": 300000,
          "tranchePrixHorsHonoraire": null,
          "idTypeResponsableHonoraires": 1,
          "idTypeChargesLocationHonoraires": null,
          "complementLoyer": 0,
          "chargesForfaitaire": 0,
          "honorairesLocataire": 0,
          "honorairesEtatsDesLieux": 0,
          "garantieLocation": 0,
          "siProvisionsSurCharges": false,
          "siForfaitaire": false,
          "siRemboursementAnnuel": false,
          "loyerReferenceMajore": null
        },
        "propertyPricesUrl": "https://www.seloger.com/prix-de-l-immo/vente/aquitaine/gironde/bordeaux/grand-parc-chartrons-paul-doumer/48325.htm",
        "averagePricePerSquareMeter": 5148,
        "minPricePerSquareMeter": 3861,
        "maxPricePerSquareMeter": 7722
      },
      "priceEvolutions": [
        {
          "rise": false,
          "priceDifferencePercentage": 4.3,
          "date": "17 octobre 2023",
          "newPrice": 311000,
          "oldPrice": 325000
        },
        {
          "rise": false,
          "priceDifferencePercentage": 100,
          "date": "17 octobre 2023",
          "newPrice": 325000,
          "oldPrice": 0
        }
      ],
      "coOwnership": {
        "annualCharges": 0,
        "numberOfLots": 80,
        "isSyndicProcedure": false
      },
      "energyPerformanceCertificate": {
        "electricityConsumption": 295,
        "energyFinalConsumption": null,
        "electricityRating": "E",
        "electricityDiagnosisDate": "2000-01-01T00:00:00",
        "electricityEstimateCostMin": 1790,
        "electricityEstimateCostMax": 2470,
        "gasEmission": 9,
        "gasRating": "B",
        "status": 0,
        "version": 2
      },
      "coordinates": {
        "latitude": null,
        "longitude": null,
        "polygon": "POLYGON ((-0.58525000000372529 44.849799999967217, -0.58046999992802739 44.852760000037961, -0.58321000006981194 44.855040000053123, -0.5914300000295043 44.852500000037253, -0.59082000004127622 44.851860000053421, -0.586210000095889 44.850179999950342, -0.58525000000372529 44.849799999967217))",
        "street": null,
        "polygonTypeId": 1
      },
      "media": {
        "photos": [
          {
            "id": 1548170869,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/a/4/p/0a4p3lsrvjjiwhdrs4y8anegdnya1dd1l9rmo9ork.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/a/4/p/0a4p3lsrvjjiwhdrs4y8anegdnya1dd1l9rmo9ork.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/a/4/p/0a4p3lsrvjjiwhdrs4y8anegdnya1dd1l9rmo9ork.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/a/4/p/0a4p3lsrvjjiwhdrs4y8anegdnya1dd1l9rmo9ork.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/a/4/p/0a4p3lsrvjjiwhdrs4y8anegdnya1dd1l9rmo9ork.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/a/4/p/0a4p3lsrvjjiwhdrs4y8anegdnya1dd1l9rmo9ork.jpg"
          },
          {
            "id": 1548170875,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/7/7/5/0775gskojkfc01v4okv9shiziwx5i504zsohzyl6o.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/7/7/5/0775gskojkfc01v4okv9shiziwx5i504zsohzyl6o.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/7/7/5/0775gskojkfc01v4okv9shiziwx5i504zsohzyl6o.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/7/7/5/0775gskojkfc01v4okv9shiziwx5i504zsohzyl6o.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/7/7/5/0775gskojkfc01v4okv9shiziwx5i504zsohzyl6o.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/7/7/5/0775gskojkfc01v4okv9shiziwx5i504zsohzyl6o.jpg"
          },
          {
            "id": 1526971955,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/b/c/l/0bclog46ivfg8p4qno9u2biq085anawhhuepe5di8.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/b/c/l/0bclog46ivfg8p4qno9u2biq085anawhhuepe5di8.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/b/c/l/0bclog46ivfg8p4qno9u2biq085anawhhuepe5di8.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/b/c/l/0bclog46ivfg8p4qno9u2biq085anawhhuepe5di8.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/b/c/l/0bclog46ivfg8p4qno9u2biq085anawhhuepe5di8.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/b/c/l/0bclog46ivfg8p4qno9u2biq085anawhhuepe5di8.jpg"
          },
          {
            "id": 1526971973,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/m/g/w/0mgw854voc8ixmm6cco4x8kxk4gcb5wgzf1x1ag80.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/m/g/w/0mgw854voc8ixmm6cco4x8kxk4gcb5wgzf1x1ag80.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/m/g/w/0mgw854voc8ixmm6cco4x8kxk4gcb5wgzf1x1ag80.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/m/g/w/0mgw854voc8ixmm6cco4x8kxk4gcb5wgzf1x1ag80.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/m/g/w/0mgw854voc8ixmm6cco4x8kxk4gcb5wgzf1x1ag80.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/m/g/w/0mgw854voc8ixmm6cco4x8kxk4gcb5wgzf1x1ag80.jpg"
          },
          {
            "id": 1526971947,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/o/9/u/0o9ugz73n6icig10snlowdiez4a1p6pjdzhjvrgdm.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/o/9/u/0o9ugz73n6icig10snlowdiez4a1p6pjdzhjvrgdm.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/o/9/u/0o9ugz73n6icig10snlowdiez4a1p6pjdzhjvrgdm.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/o/9/u/0o9ugz73n6icig10snlowdiez4a1p6pjdzhjvrgdm.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/o/9/u/0o9ugz73n6icig10snlowdiez4a1p6pjdzhjvrgdm.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/o/9/u/0o9ugz73n6icig10snlowdiez4a1p6pjdzhjvrgdm.jpg"
          },
          {
            "id": 1548170879,
            "isHorizontal": false,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/height/800/visuels/0/u/p/t/0uptn2aosa6z3fvszni95cp2itygxk7lkt0gn4abc.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/u/p/t/0uptn2aosa6z3fvszni95cp2itygxk7lkt0gn4abc.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/u/p/t/0uptn2aosa6z3fvszni95cp2itygxk7lkt0gn4abc.jpg",
            "mobileUrl": "https://v.seloger.com/s/height/600/visuels/0/u/p/t/0uptn2aosa6z3fvszni95cp2itygxk7lkt0gn4abc.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/u/p/t/0uptn2aosa6z3fvszni95cp2itygxk7lkt0gn4abc.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/height/400/visuels/0/u/p/t/0uptn2aosa6z3fvszni95cp2itygxk7lkt0gn4abc.jpg"
          },
          {
            "id": 1526971983,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/600/visuels/0/i/0/f/0i0fewpa5e685e8osu9ldgofiks92shth3hjwci3d.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/i/0/f/0i0fewpa5e685e8osu9ldgofiks92shth3hjwci3d.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/i/0/f/0i0fewpa5e685e8osu9ldgofiks92shth3hjwci3d.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/i/0/f/0i0fewpa5e685e8osu9ldgofiks92shth3hjwci3d.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/i/0/f/0i0fewpa5e685e8osu9ldgofiks92shth3hjwci3d.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/i/0/f/0i0fewpa5e685e8osu9ldgofiks92shth3hjwci3d.jpg"
          },
          {
            "id": 1526971953,
            "isHorizontal": false,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/height/800/visuels/1/4/w/m/14wm9qgjgwbi1jlq4gjecc599ksca0rlld7eqtid4.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/1/4/w/m/14wm9qgjgwbi1jlq4gjecc599ksca0rlld7eqtid4.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/1/4/w/m/14wm9qgjgwbi1jlq4gjecc599ksca0rlld7eqtid4.jpg",
            "mobileUrl": "https://v.seloger.com/s/height/600/visuels/1/4/w/m/14wm9qgjgwbi1jlq4gjecc599ksca0rlld7eqtid4.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/1/4/w/m/14wm9qgjgwbi1jlq4gjecc599ksca0rlld7eqtid4.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/height/400/visuels/1/4/w/m/14wm9qgjgwbi1jlq4gjecc599ksca0rlld7eqtid4.jpg"
          },
          {
            "id": 1526971967,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/n/c/r/0ncr9n9atnpu75x7281ryq24krbaiuo7yuoihp02o.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/n/c/r/0ncr9n9atnpu75x7281ryq24krbaiuo7yuoihp02o.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/n/c/r/0ncr9n9atnpu75x7281ryq24krbaiuo7yuoihp02o.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/n/c/r/0ncr9n9atnpu75x7281ryq24krbaiuo7yuoihp02o.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/n/c/r/0ncr9n9atnpu75x7281ryq24krbaiuo7yuoihp02o.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/n/c/r/0ncr9n9atnpu75x7281ryq24krbaiuo7yuoihp02o.jpg"
          },
          {
            "id": 1526971971,
            "isHorizontal": false,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/height/800/visuels/1/v/k/e/1vkeocsnjy56erkje8czqoojlr451wiudf6rlof94.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/1/v/k/e/1vkeocsnjy56erkje8czqoojlr451wiudf6rlof94.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/1/v/k/e/1vkeocsnjy56erkje8czqoojlr451wiudf6rlof94.jpg",
            "mobileUrl": "https://v.seloger.com/s/height/600/visuels/1/v/k/e/1vkeocsnjy56erkje8czqoojlr451wiudf6rlof94.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/1/v/k/e/1vkeocsnjy56erkje8czqoojlr451wiudf6rlof94.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/height/400/visuels/1/v/k/e/1vkeocsnjy56erkje8czqoojlr451wiudf6rlof94.jpg"
          },
          {
            "id": 1526971975,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/2/2/0/d/220d0ohikbojjrqcvmuuzvxjej5e4vqf304m9xqz4.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/2/2/0/d/220d0ohikbojjrqcvmuuzvxjej5e4vqf304m9xqz4.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/2/2/0/d/220d0ohikbojjrqcvmuuzvxjej5e4vqf304m9xqz4.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/2/2/0/d/220d0ohikbojjrqcvmuuzvxjej5e4vqf304m9xqz4.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/2/2/0/d/220d0ohikbojjrqcvmuuzvxjej5e4vqf304m9xqz4.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/2/2/0/d/220d0ohikbojjrqcvmuuzvxjej5e4vqf304m9xqz4.jpg"
          },
          {
            "id": 1526971985,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/4/v/k/04vk6pd1xp7jpaeaqkkgkmjes57hseknabr19bn3e.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/4/v/k/04vk6pd1xp7jpaeaqkkgkmjes57hseknabr19bn3e.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/4/v/k/04vk6pd1xp7jpaeaqkkgkmjes57hseknabr19bn3e.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/4/v/k/04vk6pd1xp7jpaeaqkkgkmjes57hseknabr19bn3e.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/4/v/k/04vk6pd1xp7jpaeaqkkgkmjes57hseknabr19bn3e.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/4/v/k/04vk6pd1xp7jpaeaqkkgkmjes57hseknabr19bn3e.jpg"
          },
          {
            "id": 1526971989,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/a/w/p/0awpn2qs9t473tsm8neur9gfdh6lwehb76pcp3lcg.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/a/w/p/0awpn2qs9t473tsm8neur9gfdh6lwehb76pcp3lcg.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/a/w/p/0awpn2qs9t473tsm8neur9gfdh6lwehb76pcp3lcg.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/a/w/p/0awpn2qs9t473tsm8neur9gfdh6lwehb76pcp3lcg.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/a/w/p/0awpn2qs9t473tsm8neur9gfdh6lwehb76pcp3lcg.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/a/w/p/0awpn2qs9t473tsm8neur9gfdh6lwehb76pcp3lcg.jpg"
          },
          {
            "id": 1548170881,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/1/7/r/o/17rorz2ras8e77pojxig7955gms25kglgasirh7z4.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/1/7/r/o/17rorz2ras8e77pojxig7955gms25kglgasirh7z4.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/1/7/r/o/17rorz2ras8e77pojxig7955gms25kglgasirh7z4.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/1/7/r/o/17rorz2ras8e77pojxig7955gms25kglgasirh7z4.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/1/7/r/o/17rorz2ras8e77pojxig7955gms25kglgasirh7z4.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/1/7/r/o/17rorz2ras8e77pojxig7955gms25kglgasirh7z4.jpg"
          },
          {
            "id": 1548170883,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/1/s/6/h/1s6hdkfms2jdmch17rbo8hpe2fe9136ulic59dxfk.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/1/s/6/h/1s6hdkfms2jdmch17rbo8hpe2fe9136ulic59dxfk.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/1/s/6/h/1s6hdkfms2jdmch17rbo8hpe2fe9136ulic59dxfk.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/1/s/6/h/1s6hdkfms2jdmch17rbo8hpe2fe9136ulic59dxfk.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/1/s/6/h/1s6hdkfms2jdmch17rbo8hpe2fe9136ulic59dxfk.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/1/s/6/h/1s6hdkfms2jdmch17rbo8hpe2fe9136ulic59dxfk.jpg"
          },
          {
            "id": 1548170885,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/1/h/2/i/1h2itqbjvpv4jjdy51239n8uqcnvs7q8xhprq3lvk.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/1/h/2/i/1h2itqbjvpv4jjdy51239n8uqcnvs7q8xhprq3lvk.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/1/h/2/i/1h2itqbjvpv4jjdy51239n8uqcnvs7q8xhprq3lvk.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/1/h/2/i/1h2itqbjvpv4jjdy51239n8uqcnvs7q8xhprq3lvk.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/1/h/2/i/1h2itqbjvpv4jjdy51239n8uqcnvs7q8xhprq3lvk.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/1/h/2/i/1h2itqbjvpv4jjdy51239n8uqcnvs7q8xhprq3lvk.jpg"
          },
          {
            "id": 1548170887,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/1/i/q/p/1iqpp9mih1begmmfgcwrw6dfeufxn1y00wp6hrzwg.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/1/i/q/p/1iqpp9mih1begmmfgcwrw6dfeufxn1y00wp6hrzwg.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/1/i/q/p/1iqpp9mih1begmmfgcwrw6dfeufxn1y00wp6hrzwg.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/1/i/q/p/1iqpp9mih1begmmfgcwrw6dfeufxn1y00wp6hrzwg.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/1/i/q/p/1iqpp9mih1begmmfgcwrw6dfeufxn1y00wp6hrzwg.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/1/i/q/p/1iqpp9mih1begmmfgcwrw6dfeufxn1y00wp6hrzwg.jpg"
          },
          {
            "id": 1548170889,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/2/2/y/f/22yfsu6b0ajv8dwcs9pue3dzfcmzf2q5gezezwtc0.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/2/2/y/f/22yfsu6b0ajv8dwcs9pue3dzfcmzf2q5gezezwtc0.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/2/2/y/f/22yfsu6b0ajv8dwcs9pue3dzfcmzf2q5gezezwtc0.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/2/2/y/f/22yfsu6b0ajv8dwcs9pue3dzfcmzf2q5gezezwtc0.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/2/2/y/f/22yfsu6b0ajv8dwcs9pue3dzfcmzf2q5gezezwtc0.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/2/2/y/f/22yfsu6b0ajv8dwcs9pue3dzfcmzf2q5gezezwtc0.jpg"
          },
          {
            "id": 1548170891,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/8/q/q/08qq92njd6ga6hi826kipgn714yh6vvxugesa6x6o.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/8/q/q/08qq92njd6ga6hi826kipgn714yh6vvxugesa6x6o.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/8/q/q/08qq92njd6ga6hi826kipgn714yh6vvxugesa6x6o.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/8/q/q/08qq92njd6ga6hi826kipgn714yh6vvxugesa6x6o.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/8/q/q/08qq92njd6ga6hi826kipgn714yh6vvxugesa6x6o.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/8/q/q/08qq92njd6ga6hi826kipgn714yh6vvxugesa6x6o.jpg"
          },
          {
            "id": 1548170893,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/1/i/n/01inq0oa7m0fi84hl8xleuh58ul8645m3rpnakn0g.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/1/i/n/01inq0oa7m0fi84hl8xleuh58ul8645m3rpnakn0g.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/1/i/n/01inq0oa7m0fi84hl8xleuh58ul8645m3rpnakn0g.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/1/i/n/01inq0oa7m0fi84hl8xleuh58ul8645m3rpnakn0g.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/1/i/n/01inq0oa7m0fi84hl8xleuh58ul8645m3rpnakn0g.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/1/i/n/01inq0oa7m0fi84hl8xleuh58ul8645m3rpnakn0g.jpg"
          },
          {
            "id": 1548170895,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/0/i/3/w/0i3wbrrzxcqy39c05vxjer9idddys8fy94t6opocg.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/0/i/3/w/0i3wbrrzxcqy39c05vxjer9idddys8fy94t6opocg.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/0/i/3/w/0i3wbrrzxcqy39c05vxjer9idddys8fy94t6opocg.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/0/i/3/w/0i3wbrrzxcqy39c05vxjer9idddys8fy94t6opocg.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/0/i/3/w/0i3wbrrzxcqy39c05vxjer9idddys8fy94t6opocg.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/0/i/3/w/0i3wbrrzxcqy39c05vxjer9idddys8fy94t6opocg.jpg"
          },
          {
            "id": 1548170897,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/2/8/e/f/28efn820who1v4w5xc73rikv51vxrsck6nmp6fm2o.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/2/8/e/f/28efn820who1v4w5xc73rikv51vxrsck6nmp6fm2o.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/2/8/e/f/28efn820who1v4w5xc73rikv51vxrsck6nmp6fm2o.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/2/8/e/f/28efn820who1v4w5xc73rikv51vxrsck6nmp6fm2o.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/2/8/e/f/28efn820who1v4w5xc73rikv51vxrsck6nmp6fm2o.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/2/8/e/f/28efn820who1v4w5xc73rikv51vxrsck6nmp6fm2o.jpg"
          },
          {
            "id": 1548170899,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/1/m/8/m/1m8mp4a0flcc12i9260eajwjz5txkej2egljgixs0.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/1/m/8/m/1m8mp4a0flcc12i9260eajwjz5txkej2egljgixs0.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/1/m/8/m/1m8mp4a0flcc12i9260eajwjz5txkej2egljgixs0.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/1/m/8/m/1m8mp4a0flcc12i9260eajwjz5txkej2egljgixs0.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/1/m/8/m/1m8mp4a0flcc12i9260eajwjz5txkej2egljgixs0.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/1/m/8/m/1m8mp4a0flcc12i9260eajwjz5txkej2egljgixs0.jpg"
          },
          {
            "id": 1548170901,
            "isHorizontal": true,
            "descriptiveFr": null,
            "defaultUrl": "https://v.seloger.com/s/width/800/visuels/1/3/z/9/13z98vd99m5fvnla3ago5rmi6z5n0qcorp53ovjb4.jpg",
            "squareUrl": "https://v.seloger.com/s/crop/200x200/visuels/1/3/z/9/13z98vd99m5fvnla3ago5rmi6z5n0qcorp53ovjb4.jpg",
            "squareLargeUrl": "https://v.seloger.com/s/crop/414x414/visuels/1/3/z/9/13z98vd99m5fvnla3ago5rmi6z5n0qcorp53ovjb4.jpg",
            "mobileUrl": "https://v.seloger.com/s/width/600/visuels/1/3/z/9/13z98vd99m5fvnla3ago5rmi6z5n0qcorp53ovjb4.jpg",
            "originalUrl": "https://v.seloger.com/s/cdn/x/visuels/1/3/z/9/13z98vd99m5fvnla3ago5rmi6z5n0qcorp53ovjb4.jpg",
            "photoDescriptionTags": null,
            "lowResolutionUrl": "https://v.seloger.com/s/width/400/visuels/1/3/z/9/13z98vd99m5fvnla3ago5rmi6z5n0qcorp53ovjb4.jpg"
          }
        ],
        "totalPhotoCount": 24,
        "videoUrl": null,
        "visit3DUrl": "https://youtu.be/sksNHRAUeUA?feature=shared"
      },
      "businessUnitType": "SL",
      "seoLinkBox": {
        "commodityList": [
          {
            "url": "https://www.seloger.com/immobilier/i/achat/immo-bordeaux-33/bien-appartement/commodite-cave/",
            "text": "Achat appartement avec cave à Bordeaux"
          },
          {
            "url": "https://www.seloger.com/immobilier/i/achat/immo-bordeaux-33/bien-appartement/commodite-ascenseur/",
            "text": "Achat appartement avec ascenseur à Bordeaux"
          },
          {
            "url": "https://www.seloger.com/immobilier/i/achat/immo-bordeaux-33/bien-appartement/commodite-balcon/",
            "text": "Achat appartement avec balcon à Bordeaux"
          },
          {
            "url": "https://www.seloger.com/immobilier/achat/immo-bordeaux-33/bien-appartement/type-4-pieces/",
            "text": "Achat appartement 4 pièces à Bordeaux"
          }
        ]
      },
      "seoTitle": "Vente Appartement 4 pièces Bordeaux - Appartement F4/T4/4 pièces 101 m² 311000€",
      "title": "Vente Appartement 4 pièces Bordeaux - Appartement F4/T4/4 pièces 101 m² 311000€",
      "mainTitle": "Appartement à vendre",
      "featuresPopupTitle": "appartement",
      "shortDescription": "Manson Properties vous présente en exclusivité cet appartement de Type 4 au premier étage avec ascenseur de 101m2 avec Balcons + Parking et Cave dans une résidence de standing bien entretenue et sécurisée.\r\nIl est composé de 4 pièces :une grande",
      "featureCategories": {
        "header": {
          "title": null,
          "features": [
            {
              "name": "room",
              "title": "4 pièces",
              "visibleInMainView": false
            },
            {
              "name": "bedroom",
              "title": "3 chambres",
              "visibleInMainView": false
            },
            {
              "name": "livingspace",
              "title": "101 m²",
              "visibleInMainView": false
            },
            {
              "name": "floor",
              "title": "Étage 1/5",
              "visibleInMainView": false
            }
          ]
        },
        "general": null,
        "outside": {
          "title": "Extérieur",
          "features": [
            {
              "name": "balcony",
              "title": "Balcon 11 m²",
              "visibleInMainView": true
            }
          ]
        },
        "situation": {
          "title": "Cadre et situation",
          "features": [
            {
              "name": "orientation",
              "title": "Exposition Est/Ouest",
              "visibleInMainView": true
            }
          ]
        },
        "additionalSurface": {
          "title": "Surfaces annexes",
          "features": [
            {
              "name": "box",
              "title": "Box",
              "visibleInMainView": true
            },
            {
              "name": "cellar",
              "title": "Cave",
              "visibleInMainView": true
            }
          ]
        },
        "serviceAndAccessibility": {
          "title": "Services et accessibilité",
          "features": [
            {
              "name": "elevator",
              "title": "Ascenseur",
              "visibleInMainView": true
            }
          ]
        },
        "kitchen": {
          "title": "Cuisine",
          "features": [
            {
              "name": "kitchentype",
              "title": "Cuisine séparée équipée",
              "visibleInMainView": false
            }
          ]
        },
        "hygiene": {
          "title": "Hygiène",
          "features": [
            {
              "name": "bathroom",
              "title": "Salle de bain (baignoire)",
              "visibleInMainView": false
            },
            {
              "name": "shower",
              "title": "Salle d'eau (douche)",
              "visibleInMainView": false
            },
            {
              "name": "toilet",
              "title": "Toilettes",
              "visibleInMainView": false
            }
          ]
        },
        "livingSpace": {
          "title": "Pièces à vivre",
          "features": [
            {
              "name": "lounge",
              "title": "Séjour / salon 26 m²",
              "visibleInMainView": false
            },
            {
              "name": "entrance",
              "title": "Entrée séparée",
              "visibleInMainView": false
            },
            {
              "name": "closet",
              "title": "Placards / rangements",
              "visibleInMainView": false
            }
          ]
        },
        "heating": {
          "title": "Chauffage",
          "features": [
            {
              "name": "heatingtype",
              "title": "Chauffage : non communiqué",
              "visibleInMainView": false
            }
          ]
        }
      },
      "yearOfConstruction": null,
      "transport": null
    },
    "listingBreadcrumb": {
      "breadcrumb": [
        {
          "label": "Immobilier",
          "link": "https://www.seloger.com"
        },
        {
          "label": "Annonces",
          "link": "https://www.seloger.com/immobilier/"
        },
        {
          "label": "Appartement Aquitaine à vendre",
          "link": "https://www.seloger.com/immobilier/achat/bien-appartement/aquitaine.htm"
        },
        {
          "label": "Appartement Gironde à vendre",
          "link": "https://www.seloger.com/immobilier/achat/33/bien-appartement/"
        },
        {
          "label": "Appartement Bordeaux à vendre",
          "link": "https://www.seloger.com/immobilier/achat/immo-bordeaux-33/bien-appartement/"
        },
        {
          "label": "Appartement Grand Parc-Chartrons-Paul Doumer à vendre",
          "link": "https://www.seloger.com/immobilier/achat/immo-bordeaux-33/quartier-grand-parc-chartrons-paul-doumer/bien-appartement/"
        },
        {
          "label": "Vente Appartement 4 pièces 101 m² Bordeaux - Grand Parc-Chartrons-Paul Doumer",
          "link": null
        }
      ]
    },
    "url": {
      "value": "https://www.seloger.com/annonces/achat/appartement/bordeaux-33/grand-parc-chartrons-paul-doumer/207269613.htm",
      "businessUnitType": "SL",
      "nature": 1
    },
    "earlyAccess": null
  },
  "agency": {
    "id": 453705,
    "idRcu": "RC-1312763",
    "name": "Manson Properties",
    "professionType": "Agences immobilières",
    "address": "6 QUAI LOUIS XVIII\r\n33000 BORDEAUX",
    "logo": "https://v.seloger.com/s/width/150/logos/0/d/1/b/0d1b0knhcgd20acjg3ai03v5gcjye7row9yexw6be.jpg",
    "organisationLogo": null,
    "description": null,
    "tierId": 543271,
    "feesUrl": "https://manson-properties.com/honoraires",
    "websiteUrl": "http://www.manson-properties.com/",
    "profilPageUrl": "/professionnels/agences-immobilieres/bordeaux-33000/agence-75763/",
    "phoneNumber": "06 82 32 26 68",
    "rating": {
      "rating": null,
      "reviewCount": 0,
      "reviewUrl": null
    },
    "legalNotice": {
      "socialReason": "MANSON PROPERTIES",
      "shareCapital": 33467,
      "professionalCardNumber": "CPI 3301 2021 000 000 005",
      "professionalCardPrefecture": "CCI Bordeaux-Gironde",
      "financialGuaranteeFund": "CNA HARDY",
      "financialGuaranteeAmount": 110000,
      "headquarterAddress": "6 Quai Louis XVIII 33000 Bordeaux France",
      "rcsSiren": "892572413",
      "isIndividual": false,
      "legalForm": "SAS"
    }
  }
}

Cool! Our Seloger scraper can now scrape data from both search and property pages. With this we can discover property listings and all of their details.

FAQ

To wrap up this guide on web scraping seloger, let's look at some frequently asked questions.

Yes, scraping seloger.com is perfectly legal as the data are publicly available. However, scraping personal data like sellers' personal information might validate the GDPR rules in the EU countries. For more information, refer to our previous article - is web scraping legal?

Is there a public API for seloger.com?

Currently, there is no available public API for seloger.com. However, web scraping seloger.com using Python is straightforward and a sufficient alternative.

How to avoid seloger.com web scraping blocking?

To avoid seloger.com web scraping blocking, you need to pay attention to your web scraper configurations to appear as normal browsers. For more information, refer to our previous article on web scraping blocking.

Are there alternatives to seloger.com?

Yes, leboncoin.fr is another popular website for marketplace ads in France, which includes thousands of real estate listings. We have covered how to scrape leboncoin.fr in a previous article.

Latest Seloger.fr Scraper Code
https://github.com/scrapfly/scrapfly-scrapers/

Scraping Seloger.com Summary

Seloger.com is a popular website for real estate ads in France. However, it's a highly protected website with the ability to detect and block web scrapers.

In this article, we have seen how to avoid seloger.com web scraping blocking. We have also gone through a step-by-step guide on how to scrape seloger.com search and ad pages using Python.

Related Posts

How to Scrape Reddit Posts, Subreddits and Profiles

In this article, we'll explore how to scrape Reddit. We'll extract various social data types from subreddits, posts, and user pages. All of which through plain HTTP requests without headless browser usage.

How to Scrape LinkedIn in 2024

In this scrape guide we'll be taking a look at one of the most popular web scraping targets - LinkedIn.com. We'll be scraping people profiles, company profiles as well as job listings and search.

How to Scrape SimilarWeb Website Traffic Analytics

In this guide, we'll explain how to scrape SimilarWeb through a step-by-step guide. We'll scrape comprehensive website traffic insights, websites comparing data, sitemaps, and trending industry domains.