public static void ExtractJewelry(List<ItemBase> items, List<Tuple<string, string>> images)
        {
            var web = new HtmlWeb();

            var doc = web.Load(@"http://www.pathofexile.com/item-data/jewelry", "GET");

            var breaks = doc.DocumentNode.SelectNodes("//br");

            var itemTypeHeader = doc.DocumentNode.SelectNodes(@"//h1[contains(@class,'topBar') and contains(@class,'last') and contains(@class,'layoutBoxTitle')]");

            foreach (var header in itemTypeHeader)
            {
                var h = header.InnerText;
                var table = header.SelectSingleNode("following::table[@class='itemDataTable']");
                var lines = table.SelectNodes("tr[not(descendant-or-self::th)]");

                for (int i = 0; i < lines.Count; i++)
                {
                    var namel = lines[i].SelectNodes("td");

                    var image = namel[0].SelectSingleNode("img[@data-large-image]").Attributes["data-large-image"].Value;

                    var name = namel[1].InnerText;
                    var level = namel[2].InnerText;

                    images.Add(Tuple.Create(name, image));

                    var xe = new ItemBase()
                    {
                        GearGroup = JewelryGroupMap[h],
                        Class = JewelryClassMap[h],
                        ItemType = name,
                        Level = int.Parse(level)

                    };

                    var implModnodes = new string[2][];
                    implModnodes[0] = namel[3].InnerHtml.Trim().Split(new[] { "<br>" }, StringSplitOptions.RemoveEmptyEntries).ToArray();
                    implModnodes[1] = namel[4].InnerHtml.Trim().Split(new[] { "<br>" }, StringSplitOptions.RemoveEmptyEntries).ToArray();


                    if (implModnodes.Length > 0)
                    {
                        implModnodes[0] = implModnodes[0].Select(n => n.Replace("+", "").Trim()).ToArray();
                        for (int j = 0; j < implModnodes[0].Length; j++)
                            xe.ImplicitMods.Add(new Stat(implModnodes[0][j], implModnodes[1][j]));
                    }


                    items.Add(xe);
                }
            }

        }
        public static void ExtractWeapons(List<ItemBase> items, List<Tuple<string, string>> images)
        {
            var web = new HtmlWeb();

            var doc = web.Load(@"http://www.pathofexile.com/item-data/weapon", "GET");


            var itemTypeHeader = doc.DocumentNode.SelectNodes(@"//h1[contains(@class,'topBar') and contains(@class,'last') and contains(@class,'layoutBoxTitle')]");


            XElement root = new XElement("itembaselist");

            foreach (var header in itemTypeHeader)
            {
                var h = header.InnerText;
                var table = header.SelectSingleNode("following::table[@class='itemDataTable']");
                var lines = table.SelectNodes("tr[not(descendant-or-self::th)]");

                for (int i = 0; i < lines.Count; i += 2)
                {
                    var namel = lines[i].SelectNodes("td");

                    var image = namel[0].SelectSingleNode("img[@data-large-image]").Attributes["data-large-image"].Value;
                    var name = namel[1].InnerText;

                    images.Add(Tuple.Create(name, image));

                    var level = namel[2].InnerText;
                    var damage = namel[3].InnerText;
                    var aps = namel[4].InnerText;
                    var dps = namel[5].InnerText;
                    var reqStr = namel[6].InnerText;
                    var reqDex = namel[7].InnerText;
                    var reqInt = namel[8].InnerText;

                    var xe = new ItemBase()
                    {
                        GearGroup = WeaponGroupMap[h],
                        Class = WeaponClassMap[h],
                        ItemType = name,
                        Level = int.Parse(level),
                        RequiredStr = int.Parse(reqStr),
                        RequiredDex = int.Parse(reqDex),
                        RequiredInt = int.Parse(reqInt),
                    };



                    xe.Properties.Add(new Stat("Physical Damage", damage));

                    xe.Properties.Add(new Stat("Atacks Per Second", aps ));

                    xe.Properties.Add(new Stat("Critical Strike Chance %", "5"));


                    var implModnodes = lines[i + 1].SelectNodes("td")
                        .Select(n => n.InnerHtml.Trim().Split(new[] { "<br>" }, StringSplitOptions.RemoveEmptyEntries))
                        .Where(v => v.Any(s => !string.IsNullOrEmpty(s))).ToArray();

                    if (implModnodes.Length > 0)
                    {
                        implModnodes[0] = implModnodes[0].Select(n => n.Replace("Minimum", "").Replace("Maximum", "").Trim()).Distinct().ToArray();

                        for (int j = 0; j < implModnodes[0].Length; j++)
                        {
                            xe.ImplicitMods.Add(new Stat(implModnodes[0][j], implModnodes[1][j]));
                        }
                    }

                    items.Add(xe);
                }
            }
        }