DeaD_EyE icon

ifm.com get products

DeaD_EyE | PRO | 01/14/25 01:37:49 PM UTC (Edited) | 0 ⭐ | 598 👁️ | Never ⏰ | []
Python |

2.02 KB

|

None

|

0 👍

/

0 👎

import json
from pathlib import Path
from urllib.parse import urljoin
 
import bs4
import requests
 
BASE_URL = "https://ifm.com"
REST_URL = "https://www.ifm.com/restservices/{}/productsAndAttributes"
 
def get_categories():
    return {
        e.text: e["href"]
        for e in bs4.BeautifulSoup(
            requests.get(urljoin(BASE_URL, "/de/de/category")).content, "html.parser"
        ).select("ul.sub-categories--secondary li a")
    }
 
 
def get_sub_categories(link):
    return {
        e.text.strip(): e["href"]
        for e in bs4.BeautifulSoup(
            requests.get(urljoin(BASE_URL, link)).content,
            "html.parser",
        ).select("a.tile__link-wrapper")
    }
 
 
product_file = Path.home().joinpath("Desktop", "ifm", "product_pages.json")
product_file.parent.mkdir(exist_ok=True)
 
if not product_file.exists():
    product_pages = []
    for description, link in get_categories().items():
        print(description)
        print("=" * len(description))
        sub_categories = get_sub_categories(link)
        if sub_categories:
            for description, link in sub_categories.items():
                print(description)
                product_pages.append(link)
            print("\n\n")
        else:
            print("\n")
            product_pages.append(link)
    with product_file.open("w") as fd:
        product_pages = json.dump(product_pages, fd)
else:
    with product_file.open("r") as fd:
        product_pages = json.load(fd)
 
 
for products in product_pages:
    url = REST_URL.format(products)
    for product in requests.get(url).json().get("productResults", []):
        attributes = product.get("attributes", {})
        name = attributes.get("at_produktbezeichnung", "NoName")
        price = attributes.get("formattedPrice", "NoPrice")
        if product_id := attributes.get("productId"):
            print(name, price)
            with product_file.parent.joinpath(f"{product_id}.json").open("w") as fd:
                json.dump(attributes, fd)
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎