Not sure if mentioned already but:
If you find a rare Pokemon but it has low CP and you're close to leveling, you can run away, level up, and then try to catch again. Leveling changes the CP of a Pokemon, even one that has already spawned that you have already tried to catch.
It's a risk though, because the CP can also go down.
But if you get like 46 CP Dragonite or something and you're close to leveling, sacrifice some evolutions and maybe you'll get lucky.