Always save before Legendaries. You may not catch it first time, but if you save you can easily soft-reset and try again.
Get a high leveled Pokemon with False Swipe. This will reduce the Legendary's HP to at least 1, preventing it from fainting. Eg. Say I have a Level 100 Scyther against a Level 30 Vaporeon (they dont have to be level 100) and Scyther uses False Swipe, then Vaporeon's health will be reduced to 1 HP, regardless of how much HP it had before using False Swipe (especially if there is a large level difference).
To make it quicker, use False Swipe at the start of the battle.
Stock up on Pokéballs
Make sure you buy some good Pokeballs.
Ones I find especially useful are Ultra Ball, Dusk Ball (caves or at night) Timer Ball (for those long battles) and obviously Master Ball.
Inflicting a status condition will up the catch rate.
Status conditions include:
I would recommend Paralysation, as Pokemon cannot cure themselves naturally of it. Try to avoid using Poison or Burn, as this will inflict damage to the Legendary and ut may end up fainting. Sleep and Frozen are also good, however I see Paralysation as the better status condition.
If your Pokemon are under leveled then you may find they are fainting due to the Legendary being too strong. This is bad because if your Pokemon faint then you will have to beat the Elite Four in order to be able to catch it again. So, if you seem down on Pokemon use Potions or Revives.