So far I've had good success with a honeypot. I don't know if it makes a difference, but I make the honeypot field seem like a reasonable question, like "What type of automobile do you drive?" and if the honeypot gets filled, I make it look like they successfully submitted the form, presenting them with a thank you message. The CSS is all in a class, not in the form element itself.
In the industry I work with, it is reasonable to ask people to create a user account before making purchases, responding on blogs, etc., and the account process of course requires email response to obtain a password. This of course completely eliminates spam.