import requests, sys, concurrent.futures as cf URLS = [ "https://www.alimentsduquebec.com/", "https://lesproduitsduquebec.com/", "https://signelocal.com/", "https://www.metiersdart.ca/", "https://mangeonslocal.upa.qc.ca/", "https://vinsduquebec.com/", "https://cidreduquebec.com/", "https://ambq.ca/", "https://www.fromagesdici.com/", "https://erabledici.ca/", "https://www.terroiretsaveurs.com/", "https://www.ampq.ca/", "https://www.icriq.com/", "https://mazonequebec.com/", "https://www.donneesquebec.ca/", "https://uqmd.ca/", "https://www.economusees.com/", "https://conseildesarts? no", ] HDRS={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36"} def probe(u): if " " in u: return (u,"skip","","") try: r = requests.get(u, headers=HDRS, timeout=15, allow_redirects=True) t = r.text.lower() plat = [] for sig,name in [("wp-content","wordpress"),("cdn.shopify","shopify"),("squarespace","squarespace"),("wixstatic","wix"),("drupal","drupal"),("woocommerce","woocommerce")]: if sig in t: plat.append(name) return (u, r.status_code, r.url, ",".join(plat), len(r.text)) except Exception as e: return (u, "ERR", str(e)[:80], "", 0) with cf.ThreadPoolExecutor(10) as ex: for res in ex.map(probe, URLS): print(res)