BeautifulSoup parses any page, but the page content first has to be there to parse. JSP generates the content at the server, so straight-up scraping with BeautifulSoup might be fine. But if there’s page content generated after loading – usually by running JavaScript in the browser – that’s when you need a headless browser like Selenium to let the JS run and so that you can scrape the page after it’s finished. Rule of thumb: if you can’t use cURL to get the content you’re targeting, you’ll probably need something like Selenium to load the content before scraping with something like BeautifulSoup. HTH