Здравствуйте помогите. нужно написать парсер который отыщет похожие ссылки из сайта примет PHP: Array ( [0] => / [1] => /kontaktyi/ [2] => / [3] => http://www.informer.ru/cgi-bin/redirect.cgi?id=172_1_1_22_39_1-0&url=http://www.rbc.ru&src_url=usd/usd_dm_cb_711d00_88x61.gif [4] => / [5] => /zaimy/ [6] => /katalog/gold/Yuvelirnyye_ukrasheniya/ [7] => /katalog/watch/1 [8] => /katalog/gold/antikvariat/ [9] => /katalog/gold/aksessuary/ [10] => /archive/ [11] => /kontaktyi/ [12] => /action/Vsem_skidki_v_chest_otkrytiya [13] => /katalog/read/84 [14] => /katalog/read/192 [15] => /katalog/read/watch/85 [16] => /katalog/read/watch/87 [17] => /katalog/read/watch/97 [18] => /katalog/read/watch/111 [19] => /katalog/read/watch/119 [20] => /katalog/read/watch/122 [21] => /katalog/read/watch/123 [22] => /katalog/read/watch/124 [23] => /katalog/read/watch/130 [24] => /katalog/read/watch/134 [25] => /katalog/read/watch/135 [26] => /katalog/read/watch/137 [27] => /katalog/read/watch/141 [28] => /katalog/read/watch/144 [29] => /katalog/read/watch/145 [30] => /katalog/read/watch/147 [31] => /katalog/read/watch/150 [32] => /katalog/read/watch/154 [33] => /katalog/read/watch/155 [34] => /katalog/read/watch/158 [35] => /katalog/read/watch/166 [36] => /katalog/read/watch/124 [37] => /katalog/read/watch/215 [38] => /katalog/read/watch/206 [39] => # [40] => # [41] => http://vk.com [42] => / [43] => /zaimy/ [44] => /katalog/ [45] => /kontaktyi/ ) чтоб остались только PHP: Array ( [6] => /katalog/gold/Yuvelirnyye_ukrasheniya/ [7] => /katalog/watch/1 [8] => /katalog/gold/antikvariat/ [9] => /katalog/gold/aksessuary/ [13] => /katalog/read/84 [14] => /katalog/read/192 [15] => /katalog/read/watch/85 [16] => /katalog/read/watch/87 [17] => /katalog/read/watch/97 [18] => /katalog/read/watch/111 [19] => /katalog/read/watch/119 [20] => /katalog/read/watch/122 [21] => /katalog/read/watch/123 [22] => /katalog/read/watch/124 [23] => /katalog/read/watch/130 [24] => /katalog/read/watch/134 [25] => /katalog/read/watch/135 [26] => /katalog/read/watch/137 [27] => /katalog/read/watch/141 [28] => /katalog/read/watch/144 [29] => /katalog/read/watch/145 [30] => /katalog/read/watch/147 [31] => /katalog/read/watch/150 [32] => /katalog/read/watch/154 [33] => /katalog/read/watch/155 [34] => /katalog/read/watch/158 [35] => /katalog/read/watch/166 [36] => /katalog/read/watch/124 [37] => /katalog/read/watch/215 [38] => /katalog/read/watch/206 ) т.е. нужно парсить так чтоб ссылки ввели к описанию уже товара. последовательность директорий могут быть разными
Какое начало ссылки? Ищи по началу ссылки раз оно общее для ссылок товаров и не пересекается с другими ссылками.
Напиши функцию посимвольного сравнения, если между текущим и следующим элементом есть N совпадений....
получаю список ссылок в массиве PHP: Array( [0] => /param1 [1] => /param2/ [2] => /param2/var [3] => /param2/var2/1 [4] => /param2/1 [5] => /param1 ) должно остаться PHP: Array( [1] => /param2/ [2] => /param2/var [3] => /param2/var2/1 [4] => /param2/1 )
Чем это не устраивает если у них /param2/ совпадает у всех?) --- Добавлено --- Подумай над алгоритмом и сам попробуй расписать а мы поможем его реализовать.
тем что param может быть что угодно. не только katalog или cat, нужно чтоб он отсеивал сам без моего вмешательство --- Добавлено --- парсить буду много сайтов и у всех разное вхождение
Тогда давай логику подключим. Нам необходимо по какому то признаку найти ссылки которые ведут к товарам. Парсер должен искать по какому то шаблону ссылки ведущие к товарам. Что общего у этих ссылок? Ты пишешь что общее /param2/ но мой вариант поиска по /param2/ тебе не подходит. Где логика? --- Добавлено --- Может в твоем парсере можно будет указывать для какого сайта как искать, какой шаблон использовать? --- Добавлено --- Ну зачем удалил ответ свой) Я уже начинаю угарать) Ответь на вопрос мой
да вхождения и первое и второе могут быть одинаковы. вообще парсер должен работать так есть куча сайтов которые надо парсить и естественно структуру DOM каждого изучать и по каждому писать функцию не логично. изначально парсер парсит главную страницу и находит ссылки которые введут в каталог. в каталоге находит позиции у позиций обычно у всех вхождения одинаковы которые введут в описание далее в описание выдергивать инфу которая необходима. надеюсь все правильно описал и разъяснил
Где здесь ответ на мой вопрос Ты уже выдернул что то и получил массив ссылок. Теперь тебе надо оставить те которые ведут к товарам. Твой парсер не обладает искусственным интеллектом что бы догадаться самому. Тебе надо как то указать по какому шаблону искать.
шаблон такова что первые вхождения одинаковы ну или вторые. а именно как называется вхождение надо определять по повторам
Чувак, с твоими способностями объяснять и похожу к кодингу, надо во фриланс писать что бы за тебя написали. А воровать инфу не хорошо. Ну или первое вхождение ну или второе а если левая рука зачесалась то по третьему вхождению искать. Надо на примерах смотреть что хочешь. --- Добавлено --- Подсчитай повторение и ищи. На каком этапе сейчас? Ты посчитал повторения? Можешь найти по какому шаблону искать?
PHP: Array ( [0] => javascript:void(0) [1] => about [2] => services/sell-watch [3] => services/get-credit [4] => services/product-assessment [5] => javascript:void(0) [6] => about [7] => novosti [8] => otzyvy [9] => contacts [10] => katalog/watch/ [11] => katalog/jewelery/ [12] => katalog/vertu [13] => katalog/accessories/ [14] => services/sell-watch [15] => services/get-credit [16] => services/product-assessment [17] => services/commission-shop [18] => services/watch-repair [19] => services/insurance [20] => services/tsentr-vykupa-brilliantov [21] => stati [22] => info/watch-catalogue/ [23] => info/secondary-market [24] => info/official-websites [25] => info/watch-terms [26] => http://lombard-watch.ru/ [27] => tel:+7 499 530 44 44 [28] => tel:+7 499 530 44 44 [29] => katalog/watch/ [30] => katalog/jewelery/ [31] => katalog/accessories/ [32] => contacts [33] => katalog/watch/a.-lange-and-sohne/a-lange-and-sohne-lange-1-rose-gold-116998 [34] => katalog/watch/a.-lange-and-sohne/a.-lange-i-sohne-lange-1-rose-gold-38.5mm [35] => katalog/watch/a.-lange-and-sohne/a.lange-and-sohne-lange-1-116519 [36] => katalog/watch/arnold-and-son/arnold-i-son-royal-collection-te8-tourbillon [37] => katalog/watch/arnold-and-son/arnold-and-son-tbr-true-beat-retrograde-steel-116802 [38] => katalog/watch/audemars-piguet/audemars-piguet-jules-chronograph-113299-25220 [39] => katalog/watch/audemars-piguet/audemars-piguet-millenary-automatic-ladies [40] => katalog/watch/audemars-piguet/audemars-piguet-millenary-automatic-lady-small-rose-gold [41] => katalog/watch/audemars-piguet/audemars-piguet-millenary-chronograph [42] => katalog/watch/audemars-piguet/audemars-piguet-millenary-quantieme-perpetuel-116680 [43] => katalog/watch/audemars-piguet/audemars-piguet-royal-oak-offshore-scuba-diver-boutique-edition-116955 [44] => katalog/watch/blancpain/blancpain-fifty-fathoms-bathyscaphe-automatic-113640-25236 [45] => katalog/watch/blancpain/blancpain-fifty-fathoms-bathyscaphe-automatic-116431 [46] => katalog/watch/blancpain/blancpain-l-evolution-reveil-gmt [47] => katalog/watch/blancpain/blancpain-leman-reveil-gmt-116862 [48] => katalog/watch/blancpain/blancpain-leman-ultra-slim-automatic-116934 [49] => katalog/watch/blancpain/kopiya-blancpain-villeret-chronograph-rose-gold-36505 [50] => katalog/watch/blu/blu-atoll-91648 [51] => katalog/watch/breguet/breguet-classique-alarm-le-reveil-du-tsar-82147 [52] => katalog/watch/breguet/breguet-classique-alarm-le-reveil-du-tsar-36707 [53] => katalog/watch/breguet/kopiya-breguet-classique-power-reserve-36473 [54] => katalog/watch/breguet/breguet-classique-perpetual-calendar-yellow-gold-116687 [55] => katalog/watch/breguet/breguet-classique-power-reserve-116869 [56] => katalog/watch/breguet/breguet-heritage-chronograph-platinum-bracelet-116349 [57] => katalog/watch/breguet/breguet-marine-automatic-big-date [58] => katalog/watch/breguet/breguet-marine-chronograph-rose-gold-36693 [59] => katalog/watch/breguet/kopiya-breguet-marine-royale-rose-gold-36495 [60] => katalog/watch/breguet/breguet-tradition-gmt-manual-wind-116626 [61] => katalog/watch/breitling/breitling-montbrillant-legende-steel-and-gold-hands [62] => katalog/watch/cartier/cartier-tank-americaine-midsize-white-gold-117007 [63] => katalog/watch/cartier/cartier-tank-american-automatic-chrono-xl-116456 [64] => katalog/watch/cartier/cartier-tank-francaise-yellow-gold-and-steel-116959 [65] => katalog/watch/chanel/chanel-j12-chromatic-automatic-unisex-diamonds-custom [66] => katalog/watch/chanel/chanel-j12-custom-baguette-diamonds-and-ruby [67] => katalog/watch/chanel/chanel-j12-quartz-38-mm-ceramic-and-rose-gold-117036 [68] => katalog/watch/chaumet/chaumet-liens-white-gold-diamonds-116947 [69] => katalog/watch/chopard/chopard-happy-sport-happy-hearts-117029 [70] => katalog/watch/chopard/chopard-imperiale-quartz-36mm-ladies [71] => katalog/watch/chopard/chopard-imperiale-quartz-36mm-ladies-36675 [72] => katalog/watch/chopard/chopard-l.u.c.-lunar-one-perpetual-calendar [73] => katalog/watch/chopard/chopard-l.u.c.-xp-tonneau-white-gold [74] => katalog/watch/chopard/chopard-mille-miglia-chronograph-39-mm-steel [75] => katalog/watch/chopard/chopard-mille-miglia-gmt-chronograph-speed-black-2-limited-edition [76] => katalog/watch/chopard/chopard-mille-miglia-limited-edition-rose-gold [77] => katalog/watch/chopard/chopard-two-o-ten-diamond-chronograph-107914-24987 [78] => katalog/watch/concord/concord-c1-world-timer-48411 [79] => katalog/watch/corum/corum-admirals-cup-deep-hull-48 [80] => katalog/watch/corum/corum-admirals-cup-competition-116610 [81] => katalog/watch/cvstos/cvstos-challenge-chrono-gt-limited-edition-116914 [82] => katalog/watch/de-grisogono/de-grisogono-be-eight-ladies-116577 [83] => katalog/watch/de-grisogono/de-grisogono-novantatre-n05 [84] => katalog/watch/de-grisogono/de-grisogono-uno-steel-and-rose-gold-numerals [85] => katalog/watch/dewitt/dewitt-academia-seconde-retrograde-116762 [86] => katalog/watch/dewitt/dewitt-ladies-golden-afternoon [87] => katalog/watch/franck-muller/franck-muller-chronograph-white-gold-116859 [88] => katalog/watch/franck-muller/franck-muller-cintree-curvex-classic-rose-gold-automatic-116484 [89] => katalog/watch/glashutte/glashutte-original-senator-116521 [90] => katalog/watch/glashutte/glashutte-original-senator-complete-calendar-107008-24952 [91] => katalog/watch/h.moser-and-cie/h.-moser-and-cie-collection-moser-perpetual-1-golden-edition-116565 [92] => katalog/watch/h.moser-and-cie/h.-moser-and-cie.-endeavour-small-seconds-116524 [93] => katalog/watch/hd3/hd3-slyde-by-jorg-hysek-111755 [94] => katalog/watch/hd3/hd3-slyde-by-jorg-hysek-116902 [95] => katalog/watch/hermes/hermes-dressage-yellow-gold-mother-of-pearl-116883 [96] => katalog/watch/hublot/hublot-big-bang-king-black-magic-diver-117049 [97] => katalog/watch/hublot/hublot-big-bang-king-diver-48-rose-gold-36641 [98] => katalog/watch/hublot/hublot-big-bang-rose-gold-ceramic-116941 [99] => katalog/watch/hublot/hublot-big-bang-uefa-83610 [100] => katalog/watch/hublot/hublot-classic-fusion-zirconium-ceramic-116808 [101] => katalog/watch/iwc/iwc-big-pilot’s-alexei-nemov-limited-edition [102] => katalog/watch/iwc/iwc-portuguese-hand-wound-rose-gold-boutique-edition-116971 [103] => katalog/watch/iwc/iwc-portuguese-minute-repeater-manual-limited-edition [104] => katalog/watch/jaeger-lecoultre/jaeger-lecoultre-atmos-classique-phases-de-lune-116943 [105] => katalog/watch/jaeger-lecoultre/jaeger-lecoultre-atmos-vendome-116459 [106] => katalog/watch/jaeger-lecoultre/jaeger-lecoultre-master-compressor-chronograph-2-116427 [107] => katalog/watch/jaeger-lecoultre/jaeger-lecoultre-master-compressor-diving-gmt-117047 [108] => katalog/watch/jaeger-lecoultre/jaeger-lecoultre-master-compressor-world-alarm-tides-of-time-116867 [109] => katalog/watch/jaeger-lecoultre/jaeger-lecoultre-master-grand-reveil-perpetual-calendar-steel-116981 [110] => katalog/watch/jaeger-lecoultre/jaeger-lecoultre-reverso-gran-sport-night-i-day-diamonds [111] => katalog/watch/jaeger-lecoultre/jaeger-lecoultre-reverso-manual-116495 [112] => katalog/watch/jaeger-lecoultre/jaeger-lecoultre-reverso-squadra-world-chronograph-116803 [113] => katalog/watch/jean-richard/jeanrichard-tv-screen-double-retrograde-91647 [114] => katalog/watch/lepee/lepee-arachnophobia-by-mb-and-f-101459 [115] => katalog/watch/maurice-lacroix/maurice-lacroix-masterpiece-lune-retrograde-112941-25215 [116] => katalog/watch/maurice-lacroix/maurice-lacroix-pontos-rectangulaire-date-116754 [117] => katalog/watch/omega/omega-seamaster-300m-electric-blue-116983 [118] => katalog/watch/panerai/panerai-luminor-1950-power-reserve [119] => katalog/watch/parmigiani/parmigiani-fleurier-forma-xl-hebdomadaire-8-day-power-reserve-90626 [120] => katalog/watch/parmigiani/parmigiani-fleurier-ionica-8-day-platinum-116882 [121] => katalog/watch/parmigiani/parmigiani-kalpa-116486 [122] => katalog/watch/patek-philippe/patek-philippe-calatrava-automatic-white-gold [123] => katalog/watch/patek-philippe/patek-philippe-calatrava-white-gold-116691 [124] => katalog/watch/patek-philippe/patek-philippe-vintage-ellipse-116547 [125] => katalog/watch/pierre-kunz/kopiya-pierre-kunz-retrograde-seconds-36491 [126] => katalog/watch/pierre-kunz/pierre-kunz-spirit-of-challenge-48194 ) вот еще один массив нужно исключить не повторяющиеся ссылки --- Добавлено --- а инфа только для сравнения --- Добавлено --- как раз таки вот это не знаю как в коде написать. просчитать повторение и найти наиболее повторяющиеся оставить
Компьютер не умеет пользоваться интуицией, даже примитивно. Хотя, у google есть разработки, которые отдаленно можно назвать компьютерной интуицией, но они все еще очень далеки от человеческой, при этом требуют очень много ресурсов. Тебе в любом случае надо находить какие-то общие признаки нужных тебе ссылок, которые поддаются логике, в достаточном количестве. Если ты парсишь много разных сайтов - скорее всего под одну гребенку сможешь причесать не более 60-80% сайтов. Под остальные все-таки придется делать отдельные куски кода. Может, конечно, и не придется, но это будет скорее везение. Под тот массив, который ты кинул, предлагаю такие общие признаки: 1. минимум 2 слеша в ссылке 2. нет слеша в конце 3. текст до первого слеша один для всех ссылок 4. ссылок на товары на странице больше, чем каких-либо других Под такой набор признаков вот тебе конкретный пример: PHP: $input = [ // твой массив ссылок, не буду захламлять им код ]; $calc = []; $output = []; $max = 0; $maxKey = null; foreach($input as $url){ $els = explode('/',$url); // пропускаем ссылки, у которых меньше 2 слеша if(count($els)<3) continue; // пропускаем ссылки, у которых слеш в конце if(substr($url,strlen($url)-1,1) === '/') continue; // записываем в наш массив в формате первый_элемент_uri => [uri1, uri2, ... uriN] // и записываем количество ссылок с таким первым элементом if(!isset($calc[$els[0]])){ $calc[$els[0]] = 0; $output[$els[0]] = []; } $calc[$els[0]]++; $output[$els[0]][] = $url; // сразу проверим, если это самая большая сумма - запомним if($maxKey !== $els[0] AND $max < $calc[$els[0]]){ $maxKey = $els[0]; $max = $calc[$els[0]]; } } // и посмотрим на результат print_r($output[$maxKey]);