Hey! Thanks so much for posting such a thorough article! I definitely learned from it.
One quick note from the beginning of your search_cnn function that you are building your URL from the "q" parameter.
While this definitely works, you may run into some issues if your search term had any special characters in it (like "&") in it. It's always good to use a library to deal with URLs due to all of these special rules.
The Python Standard Library has a function urllib.parse.unparse that enables you to pass a tuple and generate a URL safely. This Stackoverflow answer gives more details: stackoverflow.com/a/15799706
Thanks for sharing and keep on keeping on!