Had same issue before, turned out to be ignition switch. Quick checks on all connections at battery (inc earth), solonoid ,starter motor and good starter earth to engine/body.
2,when it does it again get a short piece of wire and connect one end to B+ at battery or on the solonoid, touch the other end on to small terminal (fron ign switch) on solonoid. if starter turns over ok then the solonoid is not getting full voltage to operate the engaugement coil inside. check for bad connection right back to ign switch.
3,If starter does not spin over, short between the two solonoid connections with screwdriver or the like (now bypassing contacts inside solonoid) if starter spins then solonoid is faulty.