I am probably going to get a bad rap for saying this but.....Have you thought about putting all these in a table? If you have a lot of them and the spaces and things need to be uniform, then a table would do the trick. Not for your page layout, but for that data. Tables can actually be useful and in my opinion this would be one of those times.
Now having said that, I have a similar situation where I need a button below an image and a little extra space before the one below it to distinguish, just like you said. What I did was float some divs next to each other in a column type layout. Put my padding in.
Start with your <p> tag, But close it after the link below, not before it. Put a </br> tag in between.
Example:
<p>testing</br>
<a href...><img.../></a>
</p>
<p>more testing</br>
<a href...><img.../></a>
</p>
This will put more space between your items. So there's 2 ways to do it and there are more but don't make it more complicated than it has to be.