# How to Scrape Klium Product Pages Without Getting Blocked > Source: https://scrape.do/blog/klium-scraping/ Published: 2025-05-12 · Updated: 2025-05-12 · Authors: Raif Tekin · Categories: Scraping Use Cases Klium is a major online supplier of professional tools, construction gear, and industrial equipment across Europe. From Bosch hammers to protective wear, it serves thousands of businesses and professionals in **Belgium, France, the Netherlands, and beyond**. If you're scraping ecommerce sites for price intelligence, supply tracking, or competitor monitoring; **Klium MUST be on your radar.** [Find fully functioning code here. ⚙](https://github.com/scrape-do/scrapedo-scrapers/tree/main/klium-scraper) But scraping it isn’t as simple as sending a GET request. ## Why Is Klium Blocking You? Klium looks like a simple ecommerce site at first, but as soon as you try to scrape it, **you hit a wall.** Even a basic `requests.get()` returns a **403 Forbidden**. No product page, no HTML; just a rejection. *Sometimes it comes with a blunt message:* ![you have been blocked klium](/uploads/blog/klium-blocked_hu74b80bb9906b47c99071678c7a9d8b94_39236_1200x0_resize_q80_h2_box_3.webp) *Other times, Klium routes you through **Cloudflare's bot protection**, which tries to challenge or verify you before loading the actual page:* ![klium cloudflare captcha](/uploads/blog/klium-cloudflare-captcha_hu2904784a8c6802677dc44a41d3442067_22611_1200x0_resize_q80_h2_box_3.webp) This protection layer is designed to detect non-human traffic. **Cloudflare checks:** * Your IP reputation (e.g. datacenter vs. residential) * Whether you're using a real browser with full JavaScript support * Your TLS fingerprint, headers, and other subtle signals And unless you pass all of those checks, which a simple Python bot won't do, your request is blocked. If you're scraping at scale or trying to run automated price monitoring, this is a deal-breaker. **You can’t get to the product page without solving Cloudflare first.** That’s why we’ll use **Scrape.do**, which handles this entire layer for you so you can get a clean HTML response, every time. ## Extract Product and Supplies Data from Klium For this guide, we’ll be scraping a real product page on Klium, a [Bosch rotary hammer.](https://www.klium.com/en/bosch-gbh-2-28-f-rotary-hammer-with-sds-plus-880-w-in-case-0611267600-121096) **We’re going to extract three things from this page:** * The product name * The price * Whether or not it’s in stock This is a very typical ecommerce scraping use case whether you're tracking competitors, syncing stock across platforms, or building a price database. And we'll do all of it in Python. ### Prerequisites We’ll keep it simple. You’ll only need two libraries: * `requests` – to send HTTP requests * `BeautifulSoup` – to parse the HTML and extract elements If you haven’t already, you can install them with: ```bash pip install requests beautifulsoup4 ``` We’ll also need a tool to help us bypass Cloudflare, but first, let’s try scraping Klium the “normal” way and see what happens. ### First Request and Getting Access Let’s start by sending a basic request to the product page using `requests`: ```python import requests url = "https://www.klium.com/en/bosch-gbh-2-28-f-rotary-hammer-with-sds-plus-880-w-in-case-0611267600-121096" response = requests.get(url) print(response) ``` This will return: ```css ``` Klium instantly blocks us. 🚫 Because **Cloudflare is instantly able to identify your scraper as a bot**. So how do we get past it? #### Scrape.do: Easiest Way to Bypass Cloudflare Scrape.do handles Cloudflare for you; no browser automation, no CAPTCHA solving, no rotating proxies. It routes your request through residential IPs, rotates TLS fingerprints, manages sessions, and renders JavaScript when needed. **All you do is send the URL.** Let’s try the same request again but this time, using Scrape.do. First, you need to [sign up to Scrape.do for free](https://dashboard.scrape.do/sign-up) and get your API token. Once you have your token, here’s the updated code to follow and get a real response from Klium: ```python import requests import urllib.parse # Your Scrape.do token token = "" # Target product URL target_url = "https://www.klium.com/en/bosch-gbh-2-28-f-rotary-hammer-with-sds-plus-880-w-in-case-0611267600-121096" encoded_url = urllib.parse.quote_plus(target_url) # Scrape.do API request with Cloudflare bypass api_url = f"https://api.scrape.do?token={token}&url={encoded_url}" # Send the request response = requests.get(api_url) # Print response status print(response) ``` You should now see: ```css ``` **That means we’ve successfully bypassed Cloudflare!** ### Extract Product Name and Price Now that we’re through Cloudflare and have the full page HTML, we can start pulling data. Let’s start with the product name and price. If you inspect the product page in your browser: * The **product name** is inside an `

` tag at the top of the page * The **price** is stored in a `` tag with the class `current-price-value`, and the actual value is inside its `content` attribute Here’s how to extract both: ```python from bs4 import BeautifulSoup import requests import urllib.parse # Scrape.do config token = "" target_url = "https://www.klium.com/en/bosch-gbh-2-28-f-rotary-hammer-with-sds-plus-880-w-in-case-0611267600-121096" encoded_url = urllib.parse.quote_plus(target_url) # Scrape.do API request with Cloudflare bypass api_url = f"https://api.scrape.do?token={token}&url={encoded_url}" # Send request and parse HTML response = requests.get(api_url) soup = BeautifulSoup(response.text, "html.parser") # Extract product name name = soup.find("h1").text.strip() # Extract product price price = soup.find("span", class_="current-price-value")["content"] # Output print("Product Name:", name) print("Price:", price) ``` You should get this output: ```css Product Name: BOSCH GBH 2-28 F rotary hammer with SDS-Plus 880 W in case - 0611267600 Price: 284.48 ``` We need one more thing: ### Extract Stock Availability Now let’s see if the product is actually in stock. There are two clues on the page: * A `
` with class `availability-label` that usually says **“In stock”** or something else * A line of text like **“We have 4 products in stock.”** somewhere near the cart button We’ll check both. If it says anything other than “In stock,” or if the element is missing, we’ll assume the item is out of stock. If it’s available, we’ll try to pull the **exact number** of items. Here’s how: ```python import requests import urllib.parse from bs4 import BeautifulSoup import re # Scrape.do token and target URL token = "" product_url = "https://www.klium.com/en/bosch-gbh-2-28-f-rotary-hammer-with-sds-plus-880-w-in-case-0611267600-121096" encoded_url = urllib.parse.quote_plus(product_url) api_url = f"https://api.scrape.do?token={token}&url={encoded_url}" # Send request and parse response response = requests.get(api_url) soup = BeautifulSoup(response.text, "html.parser") text = soup.get_text(separator=" ").lower() # Extract stock info match = re.search(r"we have (\d+) products? in stock", text) if match: stock = f"{match.group(1)} in stock" elif "in stock" in text: stock = "In stock" else: stock = "Out of stock" print("Stock Availability:", stock) ``` At the time of writing this article, the output is: ```css Stock Availability: 4 in stock ``` You might also get a response like: ```css Stock Availability: Out of stock ``` And with this, we've successfully extracted key information for a product on Klium! 🎉 ## Conclusion Scraping Klium is tricky **not because** the HTML is hard to parse, but **because Cloudflare is standing in your way.** And Klium is just one of the millions of websites that use Cloudflare. That’s why you need Scrape.do: * It bypasses Cloudflare (and any other WAF) and returns real content * It works with any URL, no setup required * It’s fast, clean, and battle-tested for ecommerce scraping Want to start [scraping e-commerce websites](https://scrape.do/blog/how-can-data-scraping-benefit-my-e-commerce-business/) at scale? [Get started with Scrape.do, 1000 credits are on the house.](https://dashboard.scrape.do/sign-up)