Assigning Minor Factions is easy, you just use a template the same as any other template. See SOA2 GSD for example.
Scrappers are both random placement as normal, and explicit entries for PlanetShipGraveyard, which is in the black list and thus can't be overwritten by a random.
Restricting them is messy, but doable.
I have not tried to prevent them from appearing elsewhere, but as yet I haven't seen the random placements appear near their specified brethren. Having colonized neutral planets already, I can verify the order of things. Minor Faction randoms are replacements, done over top of the already generated template sets. If you have a two planet jump requirement away from colonized worlds, they will only spawn outside that range of such planets, not just player starts.
Gameplay.Constants has three relevant entries for restriction.
This results in two possible ways to restrict them to single entries.
Make minConnectionDistanceToSameFactionPlanets an impossibly large value that restricts all factions to a single possible entry. This has a bit of a downside, naturally, but you could compensate with static entries as I've done with Scrappers for minor factions that need to be more prevalent.
Add a planet kill to the random template. As PlanetShipGraveyard is using it's own, separate template, I could simply add a dummy frigate to the random entry for Scrappers. This frigate would, on game start, apply a MakeDead to the planet, and itself. Planet goes boom, no Scrappers. At the same time, you have a second part to the template, that spawns random militia so the planet doesn't turn up empty.
The stupid way will essentially restrict minor factions to single entries, and be a lot of work to correct for smoothly. The smart way is complex and needs a decent understanding of ability work, but results in lost minor factions. Say your huge random map would have put out eight, but you rolled your excluded minor on three of them.