Who says people don't spend locally?
You can book official trips through the cruise company at eye watering rates , and the cruise company gets richer) but you can also book independently to go on all sorts of trips and tours at EVERY SINGLE PORT.
My DH is a coach driver and everyone a cruise ship docks in Liverpool he does day trips. City tours, Beatles tours, day trips to Chester etc . His company gets paid and so does he and dozens and dozens of other drivers. These holiday makers go to the city centre too, spend money and buy food and go on local independent walking tours. They certainly DO contribute to the local economy and they do it without taking up accommodation.
If you are worried about pollution, travel on euribia with MSC. It's the greenest ship there is apparently.
And as for absorbing the culture, not everybody can afford to go to 5/6 different places for a week at a time to "absorb the culture". Cruising seems to offer a taste of a place that could persuade you to go back and spend longer there in the future. You can also do a cruise that say, starts in Southampton and ends in Barbados, then stay there for a week to explore.
I've never been on a cruise, but I have booked some for the future. It's incredible value too, I booked a two week 2025 Barbados cruise for me and DH with p and o and it was £2200 including flights. I've paid £100 a month for it so it so pretty easy to save that by not buying coffees when out and skipping a weekly cafe lunch when out shopping etc. Then I've booked a 7 day Norwegian fjord cruise in June 2025. Two adults and 2 kids and it was £1050 and I pay £56 a month. Then my sister and I booked a 7day European Christmas market cruise in December with MSC this year to mark a birthday. Two adults, 2 kids and including all inclusive drinks, cocktails and champagne by the glass it was £1350 for all 4 of us. Kids club, loads of restaurants, swimming for the kids and all that entertainment. I'm mega looking forward to it, and I couldn't care less if judgmental people think it's Butlins at sea 😂🤷🏼♀️