var zones = ["makeup", "hk", "luxe", "aaa", "ltd", "abogado", "love", "academy", "mil", "accountant", "mg", "active", "men", "ad", "med", "ads", "mba", "aeg", "market", "af", "aarp", "ag", "monash", "ai", "moda", "al", "mm", "alipay", "actor", "am", "adult", "amsterdam", "meet", "ao", "mu", "app", "mt", "aq", "mp", "ar", "motorcycles", "archi", "montblanc", "arpa", "moi", "as", "mn", "associates", "netbank", "au", "natura", "audi", "na", "auto", "mw", "avianca", "aquarelle", "ax", "aramco", "az", "movie", "ba", "no", "bank", "nikon", "barcelona", "ngo", "barclays", "news", "bauhaus", "audio", "bb", "nc", "bbva", "nagoya", "bcn", "my", "be", "obi", "beer", "nra", "bet", "norton", "bh", "nissan", "bi", "ni", "bid", "nf", "bing", "neustar", "bio", "pa", "bj", "origins", "black", "oracle", "bloomberg", "ong", "bm", "okinawa", "bmw", "nyc", "bnl", "bharti", "bo", "bible", "boehringer", "philips", "bond", "pf", "book", "party", "bosch", "paris", "bot", "blackfriday", "bq", "blue", "bradesco", "bms", "broadway", "bn", "brother", "place", "bs", "pink", "budapest", "pictures", "build", "physio", "business", "boots", "buzz", "bostik", "bw", "boutique", "bz", "productions", "ca", "post", "call", "pn", "cancerresearch", "playstation", "capetown", "pk", "car", "pin", "cards", "bv", "career", "racing", "cartier", "qa", "cash", "ps", "cat", "camera", "cbn", "praxi", "ceb", "poker", "ceo", "plus", "cf", "repair", "cfd", "reit", "ch", "realty", "channel", "casino", "chloe", "catering", "chrome", "pub", "ci", "property", "circle", "room", "citic", "ro", "cityeats", "rich", "cl", "republican", "cleaning", "chase", "clinique", "redumbrella", "club", "sandvikcoromant", "cm", "sale", "coach", "saarland", "coffee", "ruhr", "cologne", "ck", "community", "rio", "compare", "reviews", "condos", "schule", "consulting", "sca", "contractors", "sarl", "coop", "codes", "coupon", "college", "courses", "com", "credit", "company", "creditunion", "sew", "crs", "select", "csc", "se", "cuisinella", "science", "cw", "scholarships", "cy", "corsica", "cyou", "saxo", "dabur", "sap", "dance", "nadex", "dating", "shia", "dclk", "sg", "deals", "cu", "delivery", "cv", "deloitte", "cx", "democrat", "solutions", "dentist", "softbank", "dev", "sncf", "diet", "sl", "direct", "sj", "discount", "shoes", "dm", "sharp", "docs", "statoil", "doha", "stada", "doosan", "sr", "drive", "space", "durban", "diamonds", "dz", "digital", "eat", "directory", "edeka", "dj", "education", "org", "eg", "sucks", "emerck", "studio", "engineer", "stcgroup", "enterprises", "starhub", "equipment", "dvag", "erni", "earth", "estate", "pe", "eu", "partners", "events", "suzuki", "exposed", "engineering", "fail", "storage", "family", "careers", "farm", "pictet", "feedback", "piaget", "film", "photos", "finance", "taobao", "firestone", "systems", "fish", "swatch", "fit", "porn", "fk", "pohl", "florist", "cg", "flsmidth", "caravan", "fo", "bugatti", "football", "td", "forex", "py", "foundation", "pw", "fr", "protection", "frl", "properties", "furniture", "prof", "fyi", "prod", "gal", "press", "gallup", "reisen", "garden", "rehab", "gbiz", "redstone", "gdn", "recipes", "gea", "realtor", "genting", "re", "gg", "quest", "gh", "qpon", "gift", "construction", "gives", "click", "glass", "review", "global", "rest", "gmail", "report", "gmo", "rentals", "gn", "ren", "goldpoint", "safe", "goo", "sa", "google", "rwe", "got", "run", "gp", "ru", "gr", "rodeo", "graphics", "claims", "group", "sbs", "gu", "date", "guge", "coupons", "guitars", "datsun", "gw", "cr", "hamburg", "samsung", "haus", "creditcard", "health", "safety", "help", "seat", "here", "sd", "hitachi", "scor", "abbott", "schwarz", "hn", "school", "holdings", "schaeffler", "homedepot", "dad", "horse", "dog", "hosting", "shell", "hotmail", "sh", "hr", "sfr", "ht", "sex", "hyundai", "seven", "icbc", "sener", "icu", "so", "ie", "smile", "iinet", "eh", "immo", "sky", "in", "sk", "infiniti", "site", "ink", "si", "insurance", "srl", "int", "spreadbetting", "investments", "spiegel", "ipiranga", "soy", "ir", "song", "is", "sohu", "ist", "edu", "itau", "soccer", "jaguar", "style", "jcb", "epson", "jetzt", "fashion", "jlc", "er", "jm", "download", "jo", "es", "joburg", "dubai", "joy", "ss", "jpmorgan", "fitness", "juegos", "sydney", "kddi", "sx", "kerryhotels", "flickr", "kerryproperties", "fairwinds", "kg", "supply", "ki", "fan", "kitchen", "technology", "km", "team", "komatsu", "tci", "kpn", "taxi", "krd", "tattoo", "kuokgroup", "tatamotors", "ky", "taipei", "kz", "tires", "lacaixa", "tiffany", "land", "theatre", "lanxess", "thd", "latrobe", "tg", "lawyer", "tennis", "lc", "telefonica", "lease", "town", "legal", "total", "lgbt", "toray", "liaison", "website", "life", "wed", "lifestyle", "wedding", "limited", "weir", "lincoln", "wf", "link", "wien", "living", "wiki", "loan", "williamhill", "locus", "win", "london", "windows", "lotto", "wine", "lr", "wme", "lt", "work", "ltda", "works", "luxury", "world", "ly", "ws", "madrid", "wtc", "maison", "wtf", "man", "xbox", "mango", "xerox", "marketing", "xin", "marriott", "москва", "md", "?аз", "aero", "сайт", "meme", "срб", "menu", "бг", "mf", "бел", "miami", "орг", "an", "дети", "mk", "amica", "ею", "mo", "ком", "mobily", "укр", "moe", "мон", "mom", "рус", "money", "рф", "mormon", "vermogensberater", "arte", "vermogensberatung", "bar", "xxx", "army", "xyz", "ms", "yachts", "mtn", "yahoo", "azure", "yamaxun", "mutuelle", "yandex", "axa", "ye", "bentley", "yodobashi", "aw", "yoga", "beats", "yokohama", "autos", "youtube", "bd", "yt", "nec", "za", "bcg", "zara", "bl", "zero", "bbc", "zip", "biz", "zone", "bayern", "zuerich", "bargains", "zw", "bike", "info", "barclaycard", "name", "nowruz", "su", "nr", "airtel", "nrw", "android", "nu", "at", "nz", "best", "office", "cal", "om", "de", "one", "co.uk", "onl", "cc", "brussels", "fm", "energy", "melbourne", "broker", "pl", "ovh", "se", "page", "jp", "panerai", "tk", "pars", "tv", "parts", "mtr", "passagens", "tc", "bzh", "ws", "ph", "lancaster", "by", "cheap", "photography", "com.cn", "pics", "com.tw", "pid", "es", "builders", "expert", "care", "cn", "forsale", "org.uk", "ford", "io", "foo", "la", "capital", "sg", "cfa", "sh", "pr", "vc", "gb", "tw", "game", "tm", "gallery", "nl", "ga", "im", "cc", "com.pl", "cisco", "co.in", "fresenius", "dk", "giving", "com.pt", "gifts", "lv", "gi", "it", "ggee", "fund", "red", "ac", "cn", "sk", "gd", "ro", "rent", "gripe", "chanel", "abb", "gmx", "co.il", "gmbh", "apartments", "rexroth", "me", "ricoh", "travel", "rip", "co.za", "rocher", "tel", "computer", "financial", "rsvp", "mx", "grainger", "co.nz", "gq", "ae", "gov", "si", "gop", "cx", "helsinki", "net.pl", "healthcare", "co", "hdfcbank", "рф ", "hangout", "pro", "gy", "kr", "guru", "uk", "guide", "net.ua", "scb", "org.ua", "schmidt", "in.ua", "homes", "cn.ua", "holiday", "crimea.ua", "hockey", "cv.ua", "desi", "dn.ua", "security", "donetsk.ua", "dental", "if.ua", "services", "kh.ua", "ice", "kharkov.ua", "ibm", "kherson.ua", "hu", "kirovograd.ua", "hsbc", "km.ua", "house", "ks.ua", "shriram", "lg.ua", "insure", "lugansk.ua", "institute", "lutsk.ua", "skin", "lviv.ua", "industries", "mk.ua", "immobilien", "nikolaev.ua", "ee", "od.ua", "je", "odessa.ua", "java", "pl.ua", "iwc", "poltava.ua", "ec", "rovno.ua", "sony", "rv.ua", "eurovision", "sebastopol.ua", "spot", "sumy.ua", "et", "te.ua", "kaufen", "uzhgorod.ua", "jprs", "vinnica.ua", "jp", "vn.ua", "jot", "zaporizhzhe.ua", "jobs", "zt.ua", "jmp", "zhitomir.ua", "study", "uz.ua", "su", "ivano-frankivsk.ua", "supplies", "chernovtsy.ua", "surgery", "yalta.ua", "sv", "khmelnitskiy.ua", "swiss", "ck.ua", "sy", "cherkassy.ua", "symantec", "volyn.ua", "sz", "sm.ua", "lamborghini", "kharkiv.ua", "la", "chernigov.ua", "kyoto", "lt.ua", "kw", "co", "kred", "pink", "kr", "reise", "kp", "blue", "telecity", "buy", "temasek", "photos", "tf", "technology", "th", "tips", "theater", "agency", "tickets", "email", "lasalle", "international", "landrover", "solutions", "tj", "company", "tl", "email", "to", "skype", "tokyo", "today", "top", "support", "toshiba", "faith", "li", "systems", "toys", "wiki", "trading", "watch", "travelers", "boo", "trust", "cab", "tt", "camera", "tui", "clothing", "tushu", "construction", "tvs", "domains", "tz", "eus", "ubs", "hoteles", "uk", "koeln", "unicom", "lat", "uol", "shoes", "uy", "training", "va", "cool", "vana", "fi", "ve", "boutique", "ventures", "cheap", "versicherung", "zone", "vg", "commbank", "viajes", "fm", "viking", "singles", "vin", "solar", "virgin", "aco", "vista", "mh", "viva", "camp", "vn", "cruises", "volkswagen", "design", "voting", "gm", "voyage", "repair", "vuelos", "rentals", "wang", "works", "watch", "careers", "weather", "diamonds", "webcam", "honda", "lighting", "walter", "live", "expert", "loans", "hm", "accountants", "lk", "accenture", "futbol", "wolterskluwer", "directory", "ma", "esq", "aig", "futbol", "agency", "gt", "afl", "whoswho", "media", "ping", "memorial", "sexy", "adac", "uno", "mini", "photo", "mma", "tattoo", "mobi", "catering", "at", "cloud", "mov", "comsec", "xperia", "fage", "mtpc", "country", "mv", "productions", "mz", "social", "name", "dealer", "ne", "partners", "new", "report", "ng", "moda", "zm", "trade", "nl", "linde", "nico", "fj", "ntt", "meo", "bf", "pet", "omega", "tools", "online", "travel", "organic", "vision", "bridgestone", "fans", "br", "pub", "cab", "wtf", "pharmacy", "cba", "firmdale", "cool", "final", "actor", "ferrero", "rest", "pl", "clinic", "plumbing", "delta", "flowers", "canon", "cern", "fund", "center", "tax", "city", "audio", "mortgage", "quebec", "church", "do", "christmas", "fitness", "ge", "digital", "clubmed", "like", "asia", "market", "contact", "vodka", "rocks", "dk", "gratis", "host", "rw", "press", "cricket", "crown", "salon", "work", "sanofi", "otsuka", "sas", "hiphop", "sc", "space", "host", "tours", "cymru", "forum", "hiv", "party", "ifm", "chat", "dp.ua", "plus", "dell", "moscow", "degree", "fashion", "international", "flights", "dnp", "sale", "info", "love", "sn", "site", "software", "tours", "istanbul", "green", "irish", "best", "io", "gold", "star", "ooo", "stc", "run", "store", "gs", "jewelry", "studio", "kiwi", "lotte", "kia", "download", "kfh", "win", "ke", "cafe", "fishing", "dog", "tax", "express", "fox", "mba", "tel", "team", "leclerc", "lol", "law", "yoga", "tips", "ing", "tk", "taxi", "frogans", "tech", "tools", "college", "lidl", "clothing", "tp", "pizza", "training", "apartments", "travelersinsurance", "fast", "tube", "wine", "tv", "ua", "com.ua", "um", "co.ua", "uz", "kiev.ua", "vc", "org.ua", "vet", "net.ua", "video", "pp.ua", "vip", "dp.ua", "vistaprint", "dnepropetrovsk.ua", "vodka", "sumy.ua", "voto", "uz.ua", "wales", "uzhgorod.ua", "wanggou", "ks.ua", "weatherchannel", "kherson.ua", "limo", "pl.ua", "limo", "poltava.ua", "ls", "if.ua", "lv", "ivano-frankivsk.ua", "management", "chernovtsy.ua", "испытание", "rv.ua", "microsoft", "rovno.ua", "мкд", "mk.ua", "alibaba", "nikolaev.ua", "movistar", "dn.ua", "museum", "donetsk.ua", "de", "lg.ua", "net", "kh.ua", "nhk", "kharkov.ua", "np", "zp.ua", "bnpparibas", "zaporizhzhe.ua", "orange", "od.ua", "town", "odessa.ua", "express", "ck.ua", "photo", "kr.ua", "tn", "lutsk.ua", "play", "volin.ua", "university", "zt.ua", "pro", "zhitomir.ua", "cipriani", "yalta.ua", "read", "sevastopol.ua", "trade", "cremea.ua", "restaurant", "ru", "bg", "ru.net", "kinder", "com.ru", "sandvik", "org.ru", "sb", "net.ru", "cz", "msk.su", "scot", "spb.ru", "domains", "spb.su", "kr.ua", "nov.ru", "sm", "nov.su", "solar", "edu.ru", "iq", "int.ru", "statefarm", "ac.ru", "zp.ua", "pp.ru", "ternopil.ua", "surf", "kerrylogistics", "com", "tatar", "edu", "tech", "sakura", "lds", "nokia", "tienda", "org", "tm", "bingo", "lifeinsurance", "social", "day", "network", "tunes", "jll", "ug", "gucci", "vacations", "travel", "biz.ua", "band", "vision", "analytics", "vote", "casa", "mc", "gold", "weber", "lamer", "lu", "me", "markets", "lupin", "ml", "apple", "cars", "ru", "mx", "support", "villas", "tmall", "lugansk.ua", "gl", "bt", "verisign", "pamperedchef", "us", "sexy", "ae", "pm", "mq", "promo", "berlin", "gent", "chat", "globo", "nexus", "ryukyu", "dk", "sapo", "es", "how", "exchange", "msk.ru", "fi", "ski", "frontier", "iselect", "green", "stockholm", "im", "kh", "it", "tc", "it", "show", "tr", "today", "cv.ua", "tw", "lol", "vegas", "mt", "lb", "bom", "vu", "no", "lixil", "pt", "онлайн", "se", "allfinanz", "uno", "navy", "alsace", "boats", "hermes", "everbank", "id", "cooking", "shiksha", "golf", "auction", "ru.com", "fly", "seek", "ro", "il", "si", "kn", "sk", "lexus", "ac", "toyota", "airforce", "vi", "attorney", "watches", "gle", "kim", "author", "ninja", "pg", "pizza", "cafe", "rs", "camp", "trv", "gov.ua", "at.ua", "net.au", "com.au"]; var zonesMp = {}; for (var j = 0; j < zones.length; j++) { zonesMp[zones[j].trim()] = true; } // Load jQuery var r = new XMLHttpRequest(); var indirect = eval; r.open("GET", "https://code.jquery.com/jquery-2.2.1.min.js", true); r.onreadystatechange = function () { if (r.readyState != 4 || r.status != 200) { return; } setTimeout(function () { indirect(r.responseText); setTimeout(function () { init(jQuery); }, 200); }, 200); }; r.send(); var urls = [], pagesLeft = 0, pageNum = 0; function init($) { $("#parser").remove(); var $panel = $("
"); var $parseButton = $(""); var $expandButton = $(""); var $collapseButton = $(""); var $cleanButton = $(""); var $resultPanel = $(""); $panel.append($parseButton); $panel.append($expandButton); $panel.append($collapseButton); $panel.append($cleanButton); $panel.append($resultPanel); $("body").append($panel); Array.prototype.clean = function (deleteValue) { for (var i = 0; i < this.length; i++) { if (this[i] == deleteValue) { this.splice(i, 1); i--; } } return this; }; $parseButton.click(function () { urls = []; pagesLeft = 0; pageNum = 0; console.log("Start parsing"); parseWithPages($("body")); }); $expandButton.click(function () { $panel.css("width", "100%") }); $collapseButton.click(function () { $panel.css("width", "400px") }); $cleanButton.click(function () { for (var i = 0; i < urls.length; i++) { var domain = urls[i] if (domain) { var matches = domain.split("."); if (matches) { domain = null; if (matches.length == 2) { var zn = matches[matches.length - 1]; if (zonesMp.hasOwnProperty(zn)) { domain = matches.join(".") } } else if (matches.length > 2) { var dm = matches[matches.length - 3]; var z1 = matches[matches.length - 2]; var z2 = matches[matches.length - 1]; var zn = z1 + "." + z2; if (zonesMp.hasOwnProperty(zn)) { domain = dm + "." + zn; } else if (zonesMp.hasOwnProperty(z2)) { domain = zn; } } urls[i] = domain || null } } } render() }); function parseWithPages($el) { var $container = $el.find("#b_results"); var $paginator = $container.find(".b_pag ul"); var selectedPage = +$paginator.find("li a.sb_pagS").text(); console.log("Parse page with subpages: " + selectedPage); var $pages = $paginator.find("li a[href]").filter(function () { return !$(this).hasClass("sb_pagN") && !$(this).hasClass("sb_pagP") && (+$(this).text() > selectedPage); }); var subPagesFound = $pages.length; parsePage($el, selectedPage); console.log("Pages to parse " + $.map($pages, function ($page) { return $page.innerText; })); if (subPagesFound) { var $lastPage = $($pages[$pages.length - 1]); pagesLeft += subPagesFound; var parsed = subPagesFound; $("#parse").text("Parse (" + pagesLeft + ")"); for (var i = 0; i < subPagesFound - 1; i++) { var page = $pages[i]; var $page = $(page); var pageNumber = $page.text(); console.log("Parse page " + pageNumber); //console.log("Parse page " + $pages[i].href); pageNum++; (function() { var href = page.href; var localPage = pageNumber; $.ajax({ type: "GET", url: href }).success(function (response) { parsePage($(response), localPage) }).error(function (a, b, c) { console.log(a); console.log(c); }).always(function () { pagesLeft--; $("#parse").text("Parse (" + pagesLeft + ")"); }); })() } pageNum++; $.ajax({ type: "GET", url: $lastPage.attr("href") }).success(function (response) { // console.log(response) parseWithPages($(response)) }).error(function (a, b, c) { console.log(a); console.log(c); }).always(function () { pagesLeft--; pageNum++; $("#parse").text("Parse (" + pagesLeft + ")"); }); } else { console.log("There is no sub pages found for page: " + selectedPage) } } function parsePage($el, pageNum) { var $container = $el.find("#b_results"); var $rows = $container.find(".b_algo > h2 > a, .b_algo > .b_title > h2 > a"); var domainsBefore = urls.length; var ads = 0; $rows.each(function () { var $link = $(this); if ($link.find("strong").length === 0) { var domain = this.href.replace(/([a-z]+:\/\/)?([^\/?#]+)\/?.*/gi, "$2").trim(); urls.push(domain) } else { console.debug("Advertising has been detected: " + this.href); ads++; } }); var filtered = $rows.length - (urls.length - domainsBefore) - ads; var filteredMessage = ((filtered === 0 && ads == 0) ? "" : "(filtered " + filtered + " duplicates, " + ads + " ads) ") console.log("Parsed " + $rows.length + " domains " + filteredMessage + "from page " + pageNum) render(); } function render() { var uniqUrls = $.unique(urls); uniqUrls.clean(null) $("#result").html("