Two main potential culprits here:
1. Dynamic Javascript
Lots of sites will dynamically load content in with javascript after the HTML, but beautifulsoup only gets the inital HTML grab.
The best solution for this is to use selenium instead
2. Getting blocked for being a scraper.
Many sites will see non-realistic looking users (in this case your scraper) and deliberately not give you content.
You should improve your header with more information to not get detected so quickly as a scraper, as your header is pretty basic