# models.py from django.db import models class Project(models.Model): title = models.CharField(max_length=200) description = models.TextField() company_name = models.CharField(max_length=200) website = models.URLField() date_posted = models.DateField(auto_now_add=True) # forms.py from django import forms class ScraperForm(forms.Form): keywords = forms.CharField(label='Keywords', max_length=200) websites = forms.CharField(label='Websites', max_length=200) # views.py from django.shortcuts import render from .models import Project from .forms import ScraperForm import requests from bs4 import BeautifulSoup from django.utils import timezone def scrape_projects(request): if request.method == 'POST': form = ScraperForm(request.POST) if form.is_valid(): keywords = form.cleaned_data['keywords'].split() websites = form.cleaned_data['websites'].split() for website in websites: url = website.strip() response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') for keyword in keywords: projects = soup.find_all(string=lambda text: text and keyword.lower() in text.lower()) for project in projects: # Extract project information title = project.find('h2').text.strip() description = project.find('p').text.strip() company_name = project.find('span', class_='company-name').text.strip() website = url date_posted = timezone.now() # Save project to database project_obj = Project(title=title, description=description, company_name=company_name, website=website, date_posted=date_posted) project_obj.save() projects = Project.objects.all() return render(request, 'projects.html', {'projects': projects}) else: form = ScraperForm() return render(request, 'index.html', {'form': form})