public static List<CategoryNode> buildCategoryByUrl(String url) throws IOException {
		System.out.println("Trying to get url: " + url);
		Document document;
		try {
			document = Jsoup.connect(url).get();
		} catch(IOException e) {
			throw new IOException("Error when get " + url, e);
		}
		Elements elements = document.select("ul[data-typeid=n]");
		List<CategoryNode> nodes = new ArrayList<CategoryNode>();
		if(!elements.isEmpty()) {
			Element ul = elements.first();
			Elements liElements = ul.select("li");
			if(!liElements.isEmpty()) {
				Iterator<Element> iterator = liElements.iterator();
				while(iterator.hasNext()) {
					Element li = iterator.next();
					if(li.select("strong").size() > 0) {
						if(!iterator.hasNext()) {
							nodes.add(buildCategoryChain(liElements));
							break;
						}
						while(iterator.hasNext()) {
							Element childLi = iterator.next();
							String link = childLi.select("a").first().attr("href");
							if(!link.startsWith("http")) {
								link = AMAZON_HOME + link;
							}
							nodes.addAll(buildCategoryByUrl(link));
						}
					}
				}
			}
		}
		return nodes;
	}