class ImageAnalyzer: def analyze_site(self, site_data): """ Analyzes the crawled site data for missing ALT text. :param site_data: Dict { page_url: [image_dicts] } :return: Dict containing summary and detailed report. """ total_images = 0 total_missing_alt = 0 pages_report = [] for page_url, images in site_data.items(): missing_images = [] for img in images: total_images += 1 alt_text = img.get('alt') # Check for strictly missing alt text (None or empty string) if not alt_text or alt_text.strip() == "": # Double check if 'alt' attribute existed but was empty vs didn't exist? # The crawler uses .get('alt', '') so it's '' if missing. # User asked for "missing alt text". # We will count empty string as missing alt text for SEO purposes. missing_images.append(img['src']) total_missing_alt += 1 pages_report.append({ "page_url": page_url, "missing_alt_count": len(missing_images), "images_without_alt": list(set(missing_images)) }) return { "summary": { "total_pages_scanned": len(site_data), "total_images_found": total_images, "total_images_missing_alt": total_missing_alt }, "details": pages_report }