@Override
	public void run() {
		String url = getUrl();
		WebCrawler crawler = getWebCrawler();
		try {
			Thread.sleep(getPolitenessTimeout());
			if (crawler.markAsVisited(url)) {
				try {
					Page loadedPage = loadPage(url);
					LinkHandler linkHandler = getLinkHandlerFactory()
							.getLinkHandler();
					if (linkHandler.shouldVisit(url)) {
						linkHandler.visit(loadedPage);
					}
					List<String> childUrls = getChildUrls(url, loadedPage);
					for (String childUrl : childUrls) {
						if (linkHandler.shouldVisit(childUrl)) {
							webCrawler.queueLink(childUrl);
						}
					}
				}
				catch (Exception e) {
					handleExeption(e);
				}
			}
		}
		catch (InterruptedException e) {
			handleExeption(e);
		}
		finally {
			crawler.urlProcessed(url);
		}
	}