Automate booking on a travel site
I think the biggest thing you have to take into account is Separation of Concerns. You should definitely separate page and element definitions from the actual logic of the test. Put your element locators into Page Objects and reference page object attributes in your tests. You can, for instance, have a Search page, a Search Results page, a Booking page on a high level which, in turn, may consist of inner page objects defining blocks/parts of a page.

Another way to abstract things away is Behavior Driven Development which would, at least, make you think of the actions and conditions on the target site pages and describe them in a natural language. There are a few Python packages for BDD, in particular - behave which can be, of course, used with selenium: Using the behave Framework for Selenium BDD Testing: A Tutorial