Dear Natalia,
Great to hear that it appears to e working for you. However, I'm not sure that the 1. rule is really what you want. In particular, it will also prevent shipping if a customer buys 1 bottle of spirit and three other articles (because the articles variable will be 4, and the "alcohol-limitation" shipping class will be in the cart, too).
If your condition is actually "at least three bottles of spirits, plus optionally some other articles", then I suppose there is is no way around using one of the evaluate_for_...(Articles, ...) functions. Unfortunately, there is currently no function to evaluate a variable only for all products with a given shipping class (we have added it to our TODO list, but can't say whether or when we will implement this). So, for now you'll need to use evaluate_for_categories:
Name=Shipping not available for more than 2 bottles of spirit; evaluate_for_categories(Articles, "spirits")>2; NoShipping
Please also note that your condition "articles>3" means that four or more articles are bought (> means strictly larger, while >= means larger or equal).
The rule for 2. looks fine.
Regarding your question about categories and shipping classes: There is really not much difference technically. Using shipping classes makes sense if shipping is the only area that is affected, while categories allow you to distinguish for shipping also also in other areas (e.g. the display in your shop). Also, in your particular case, since there is no evaluate_for_shippingclasses function yet, you'll need to use categories to achieve 1.
Best regards,
Reinhold