Spaces:
Sleeping
Sleeping
| import requests | |
| from bs4 import BeautifulSoup | |
| import csv | |
| import os | |
| def extract_course_info(html_content, url): | |
| soup = BeautifulSoup(html_content, 'html.parser') | |
| # Extract course name | |
| course_name = soup.title.string if soup.title else "Course name not found" | |
| # Extract key takeaways - Updated selector to match the provided HTML | |
| key_takeaways = [] | |
| checklist_container = soup.find('div', class_='checklist__container') | |
| if checklist_container: | |
| takeaway_items = checklist_container.find_all('li', class_='checklist__list-item') | |
| for item in takeaway_items: | |
| p_tag = item.find('p') | |
| if p_tag: | |
| # Remove the icon and get clean text | |
| takeaway_text = p_tag.text.replace('\uf00c', '').strip() | |
| # Remove "fa fa-check" text if present | |
| takeaway_text = takeaway_text.replace('fa fa-check', '').strip() | |
| key_takeaways.append(takeaway_text) | |
| # Extract course time, ratings, and difficulty level - FIXED PART | |
| # Use safer method to handle NoneType and avoid errors | |
| course_time = soup.find('li', class_='text-icon__list-item') | |
| course_time_text = course_time.find('h4').text if course_time else "Course time not found" | |
| ratings = course_time.find_next_sibling('li').find('h4').text if course_time and course_time.find_next_sibling('li') else "Ratings not found" | |
| difficulty_sibling = course_time.find_next_sibling('li').find_next_sibling('li') if course_time and course_time.find_next_sibling('li') else None | |
| difficulty = difficulty_sibling.find('h4').text if difficulty_sibling else "Difficulty level not found" | |
| # Extract course description | |
| description = "Description not found" | |
| description_section = soup.find('div', class_='course-description') | |
| if description_section: | |
| first_p = description_section.find('p') | |
| if first_p: | |
| description = first_p.text.strip() | |
| return { | |
| "course_name": course_name, | |
| "key_takeaways": ', '.join(key_takeaways) if key_takeaways else "No key takeaways found", | |
| "course_time": course_time_text, | |
| "ratings": ratings, | |
| "difficulty": difficulty, | |
| "description": description, | |
| "website": url | |
| } | |
| def append_to_csv(course_info, csv_filename="course_data.csv"): | |
| file_exists = os.path.isfile(csv_filename) | |
| with open(csv_filename, mode='a', newline='', encoding='utf-8') as file: | |
| writer = csv.writer(file) | |
| if not file_exists: | |
| writer.writerow(["Course Name", "Key Takeaways", "Course Time", "Ratings", "Difficulty", "Description", "Website"]) | |
| writer.writerow([ | |
| course_info["course_name"], | |
| course_info["key_takeaways"], | |
| course_info["course_time"], | |
| course_info["ratings"], | |
| course_info["difficulty"], | |
| course_info["description"], | |
| course_info["website"] | |
| ]) | |
| # Add headers to help avoid blocking | |
| headers = { | |
| 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' | |
| } | |
| # Updated list of URLs to process | |
| urls = [ | |
| "https://courses.analyticsvidhya.com/courses/genai-applied-to-quantitative-finance-for-control-implementation", | |
| "https://courses.analyticsvidhya.com/courses/navigating-llm-tradeoffs-techniques-for-speed-cost-scale-and-accuracy", | |
| "https://courses.analyticsvidhya.com/courses/creating-problem-solving-agents-using-genai-for-action-composition", | |
| "https://courses.analyticsvidhya.com/courses/improving-real-world-rag-systems-key-challenges", | |
| "https://courses.analyticsvidhya.com/courses/choosing-the-right-LLM-for-your-business", | |
| "https://courses.analyticsvidhya.com/courses/building-smarter-llms-with-mamba-and-state-space-model", | |
| "https://courses.analyticsvidhya.com/courses/genai-a-way-of-life", | |
| "https://courses.analyticsvidhya.com/courses/building-llm-applications-using-prompt-engineering-free", | |
| "https://courses.analyticsvidhya.com/courses/building-your-first-computer-vision-model", | |
| # New URLs | |
| "https://courses.analyticsvidhya.com/courses/bagging-boosting-ML-Algorithms", | |
| "https://courses.analyticsvidhya.com/courses/midjourney_from_inspiration_to_implementation", | |
| "https://courses.analyticsvidhya.com/courses/free-understanding-linear-regression", | |
| "https://courses.analyticsvidhya.com/courses/The%20Working%20of%20Neural%20Networks", | |
| "https://courses.analyticsvidhya.com/courses/free-unsupervised-ml-guide", | |
| "https://courses.analyticsvidhya.com/courses/building-first-rag-systems-using-llamaindex", | |
| "https://courses.analyticsvidhya.com/courses/data-preprocessing", | |
| "https://courses.analyticsvidhya.com/courses/exploring-stability-ai", | |
| "https://courses.analyticsvidhya.com/courses/free-building-textclassification-natural-language-processing", | |
| "https://courses.analyticsvidhya.com/courses/getting-started-with-llms", | |
| "https://courses.analyticsvidhya.com/courses/introduction-to-generative-ai", | |
| "https://courses.analyticsvidhya.com/courses/nano-course-dreambooth-stable-diffusion-for-custom-images", | |
| "https://courses.analyticsvidhya.com/courses/a-comprehensive-learning-path-for-deep-learning-in-2023", | |
| "https://courses.analyticsvidhya.com/courses/a-comprehensive-learning-path-to-become-a-data-scientist-in-twenty-twenty-four", | |
| "https://courses.analyticsvidhya.com/courses/building-large-language-models-for-code", | |
| "https://courses.analyticsvidhya.com//bundles/certified-ai-ml-blackbelt-plus", | |
| "https://courses.analyticsvidhya.com/courses/machine-learning-summer-training", | |
| "https://courses.analyticsvidhya.com/courses/ai-ethics-fractal", | |
| "https://courses.analyticsvidhya.com/courses/a-comprehensive-learning-path-to-become-a-data-engineer-in-2022", | |
| "https://courses.analyticsvidhya.com/bundles/certified-business-analytics-program", | |
| "https://courses.analyticsvidhya.com/bundles/certified-machine-learning-master-s-program-mlmp", | |
| "https://courses.analyticsvidhya.com/bundles/certified-natural-language-processing-master-s-program", | |
| "https://courses.analyticsvidhya.com/bundles/certified-computer-vision-masters-program", | |
| "https://courses.analyticsvidhya.com/courses/applied-machine-learning-beginner-to-professional", | |
| "https://courses.analyticsvidhya.com/courses/ace-data-science-interviews", | |
| "https://courses.analyticsvidhya.com/courses/writing-powerful-data-science-articles", | |
| "https://courses.analyticsvidhya.com/courses/machine-learning-certification-course-for-beginners", | |
| "https://courses.analyticsvidhya.com/courses/data-science-career-conclave", | |
| "https://courses.analyticsvidhya.com/courses/top-data-science-projects-for-analysts-and-data-scientists", | |
| "https://courses.analyticsvidhya.com/courses/getting-started-with-git-and-github-for-data-science-professionals", | |
| "https://courses.analyticsvidhya.com/courses/machine-learning-starter-program", | |
| "https://courses.analyticsvidhya.com/courses/data-science-hacks-tips-and-tricks", | |
| "https://courses.analyticsvidhya.com/courses/introduction-to-analytics", | |
| "https://courses.analyticsvidhya.com/courses/introduction-to-pytorch-for-deeplearning", | |
| "https://courses.analyticsvidhya.com/courses/introductory-data-science-for-business-managers", | |
| "https://courses.analyticsvidhya.com/courses/intro-to-nlp", | |
| "https://courses.analyticsvidhya.com/courses/getting-started-with-decision-trees", | |
| "https://courses.analyticsvidhya.com/courses/introduction-to-data-science", | |
| "https://courses.analyticsvidhya.com/courses/loan-prediction-practice-problem-using-python", | |
| "https://courses.analyticsvidhya.com/courses/big-mart-sales-prediction-using-r", | |
| "https://courses.analyticsvidhya.com/courses/twitter-sentiment-analysis", | |
| "https://courses.analyticsvidhya.com/courses/pandas-for-data-analysis-in-python", | |
| "https://courses.analyticsvidhya.com/courses/support-vector-machine-svm-in-python-and-r", | |
| "https://courses.analyticsvidhya.com/courses/evaluation-metrics-for-machine-learning-models" | |
| ] | |
| # Process each URL | |
| for url in urls: | |
| try: | |
| print(f"Processing {url}...") | |
| response = requests.get(url, headers=headers) | |
| response.raise_for_status() # Check for HTTP errors | |
| html = response.content | |
| course_info = extract_course_info(html, url) | |
| append_to_csv(course_info) | |
| print(f"Data for {url} has been successfully appended.") | |
| except Exception as e: | |
| print(f"Failed to process {url}: {e}") | |