On #2, using binary block/allow lists for sites works, but long term, it
can be problematic in the sense of maintenance effort (i.e. your time
;). A less common but more interesting approach is to use site-based
weighting. There will still be some manual wrangling involved, but you
might be able to automate some of it eventually (analysis of content on
the site, dns, linked-from analysis, google page-rank lookup, etc.)
With site-based weighting, you can still block with a threshold, but you gain the benefit of adjusting rankings based on past/known site quality, and the advantage of setting with a "default weight" for unknown sites you've never seen before.
It's really just a different approach that you might want to consider to handle the webspam/blogspam problem.