Contributor's guide to writing municipal scrapers