# Scraping Fnac: How to Extract Product Prices Without Getting Blocked > Source: https://scrape.do/blog/fnac-scraping/ Published: 2025-02-06 · Updated: 2025-02-06 · Authors: Mert Bekci · Categories: Scraping Use Cases Fnac is a leading retailer in France and Spain, offering everything from electronics and books to household appliances. And **if you’ve tried scraping Fnac** for product prices and stock availabilty\*\*, you’ve probably been blocked.\*\* The site actively prevents automated access through **regional restrictions and custom WAF rules**, making it difficult to retrieve structured data. *But there’s a way around it.* In this guide, we’ll break down **why Fnac is difficult to scrape, how its defenses work, and how to bypass them using Scrape.do** to extract product information without getting blocked. [Find fully-functioning code here ⚙](https://github.com/scrape-do/scrapedo-scrapers/tree/main/fnac-scraper) ## Why Scraping Fnac Is Difficult Fnac, like many large e-commerce websites, has implemented multiple layers of security to prevent automated data collection. These protections make traditional scraping techniques unreliable and often result in blocked requests. ### 1\. Regional Restrictions Fnac enforces strict **geo-blocking**, meaning certain content is only accessible from specific countries. If your requests originate from an unsupported region, you may see incomplete data or be denied access altogether. * Pages may **redirect** users based on location. * Some product listings **vary by country**, requiring different approaches depending on the target market. * Requests from IPs outside **France or Spain** often receive **403 Forbidden** errors. ### 2\. Custom WAF Rules Fnac uses a **custom Web Application Firewall (WAF)** to detect and block scrapers. Unlike standard WAF solutions, Fnac’s security rules are tailored for its platform and include: * **Behavior tracking** to detect non-human interaction patterns. * **Session-based fingerprinting** that correlates multiple requests from the same scraper. * **Aggressive rate-limiting** that blocks repeated requests within a short time frame. These protections make it difficult to scrape Fnac without **advanced request management techniques**. ## How Scrape.do Bypasses These Challenges Scrape.do is designed to handle **geo-restrictions, WAF defenses, and session tracking**, allowing seamless access to Fnac’s data without being blocked. ### Geo-targeted Proxies Fnac enforces strict **regional access**, making it difficult to scrape without an IP from an approved location. ✅ Scrape.do automatically routes requests through **France- and Spain-based residential and ISP proxies**, ensuring requests appear as legitimate user traffic. ### Advanced Session Management Many blocks occur because Fnac tracks browsing sessions, flagging scrapers that repeatedly access product pages. ✅ Scrape.do maintains **persistent session handling**, preventing Fnac from detecting bot-like behavior across multiple requests. ### Dynamic Request Optimization Fnac’s **custom WAF** relies on fingerprinting techniques to detect scrapers based on request headers, TLS fingerprints, and browsing patterns. Scrape.do dynamically adjusts: * **Headers and user agents** to mimic real browser requests. * **TLS fingerprints** to match legitimate users. * **Request timing** to prevent triggering rate limits. With these optimizations, Fnac can be scraped without triggering **403 errors, redirects, or temporary bans**. ## Extracting Data from Fnac Without Getting Blocked Now that we have a strategy to bypass Fnac’s protections, we’ll start extracting product data. First, we need to ensure our request reaches the page successfully and returns a **200 OK** response. ### 1\. Prerequisites Before scraping Fnac, install the required dependencies if you haven’t already: ```bash pip install requests beautifulsoup4 ``` You'll also need an API key from Scrape.do, which you can obtain by [signing up for FREE at Scrape.do.](https://dashboard.scrape.do/sign-up) We'll scrape product information from [this iPhone 16 model](https://www.fnac.com/Apple-iPhone-16-Pro-Max-6-9-5G-256-Go-Double-SIM-Noir-Titane/a17312773/w-4). ![extract iphone data from fnac](/uploads/blog/fnac-data-extraction-iphone_hufbdb7ebdf8534721e4e18c04a4d6667c_185239_1200x0_resize_q80_h2_box_3.webp) ### 2\. Sending a Request and Verifying Access ```python import requests import urllib.parse # Our token provided by Scrape.do token = "" # Target Fnac product URL target_url = urllib.parse.quote_plus("https://www.fnac.com/Apple-iPhone-16-Pro-Max-6-9-5G-256-Go-Double-SIM-Noir-Titane/a17312773/w-4") # Optional parameters render = "true" geo_code = "fr" super_mode = "true" # Scrape.do API endpoint url = f"https://api.scrape.do/?token={token}&url={target_url}&geoCode={geo_code}&super={super_mode}" # Send the request response = requests.request("GET", url) # Print response status print(response) ``` Here's the expected output: ```yaml ``` If the request is successful, we can move on to extracting the **product name**. ## Extracting the Product Name The product name is stored in an `

` tag, making it easy to locate and extract using `BeautifulSoup`. ```python from bs4 import BeautifulSoup import requests import urllib.parse # Our token provided by Scrape.do token = "" # Target Fnac product URL target_url = urllib.parse.quote_plus("https://www.fnac.com/Apple-iPhone-16-Pro-Max-6-9-5G-256-Go-Double-SIM-Noir-Titane/a17312773/w-4") # Optional parameters render = "true" geo_code = "fr" super_mode = "true" # Scrape.do API endpoint url = f"https://api.scrape.do/?token={token}&url={target_url}&geoCode={geo_code}&super={super_mode}" # Send the request response = requests.request("GET", url) # Parse the response using BeautifulSoup soup = BeautifulSoup(response.text, "html.parser") # Extract product title title = soup.find("h1").text.strip() print("Product Name:", title) ``` Expected output: ```yaml Product Name: Apple iPhone 16 Pro Max 6,9" 5G 256 Go Double SIM Noir Titane ``` Now that we have the product name, we’ll extract the **price** in the next section. ## Extracting the Product Price With the product name successfully extracted, we now need to get the price. The price is located inside a `` tag with the class **`f-faPriceBox__price userPrice checked`**, as seen in the inspected HTML. ```python <----- Previous section until the Print command -----> # Extract product price price = soup.find("span", class_="f-faPriceBox__price userPrice checked").text.strip() print("Product Price:", price) ``` Expected output: ```yaml Product Price: 1 431 € ``` If the extracted value contains unwanted spaces (`1 431 €`), you can clean it up: ```python price = price.replace("\xa0", " ") # Replace non-breaking space ``` **Congratulations 🎉,** you are now able to extract product data from Fnac without any blocks! ## Conclusion Scraping Fnac is difficult due to **geo-restrictions and custom WAF rules**, but not impossible. Need to scrape Fnac? **Scrape.do makes it simple.** [Get **1000 free API calls** and start now.](https://dashboard.scrape.do/sign-up)