The cheapest way I’ve found to do anti-spam, in terms of developer time, is to check for javascript. Crawler spam bots generally do not have javascript enabled, so if you use javascript to add a hidden element to a form, then most spam crawlers will miss it. Of course this doesn’t stop anybody making a concerted effort, but then, very little will. Here’s my super-simple method:

$(document).ready(function(){
  elem = $('<input type="hidden" name="antispam" value="somethingsimple" />')
  $('#form').after(elem)
})

Then, in whatever you’re using to handle the form input (Sinatra, php, etc) just check for the existence of that variable. First found this method to be mad effective when I was doing Wordpress sites, and the WP Antispam used this to good effect.