Update URL fetchers to use BeautifulSoup 4

This closes issue #5.