| 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 | |
| } | |