я тут внезапно одну штуку заметил. мне кажется SE::Google::Suggest не оттуда парсит подсказки, поэтому получаются странные результаты, которые зачастую вообще не имеют отношения к реальности. вот сравните эти два линка. апарсер парсит первый линк: https://www.google.com/complete/sea...=psy-ab&xssi=t&gs_ri=gws-wiz&hl=en&authuser=0 http://suggestqueries.google.com/co...me&hl=en&gl=us&callback=?&q=slot real money x тоесть во втором линке нет подсказок, но есть одно но. по первому линку приходят подсказки, которые дополняют введённый кей фактически рандомным словом, тогда как по второму приходят только подходящие кеи, и если их нет - гугл не будет изворачиваться и пытаться предложить что-то непонятное, а просто скажет что кеев нет. чтобы было нагляднее - при вводе этого запроса мы получим вот такую часть подсказки http://dl4.joxi.net/drive/2019/01/24/0020/3690/1338986/86/be82a668b3.png которая собственно и распознаётся апарсером, как кейворд из подсказки, хотя фактически он является мусорным и выдаётся гуглом, можно сказать, от безысходности )) а вот когда у гугла действительно есть кеи для подсказок - тогда результаты по линкам будут одинаковыми. можете для примера подставить туда кей "slot real money b", там всё будет наглядно. вобщем я предлагаю либо исправить линк на тот, который не парсит мусора, либо сделать какую-нибудь надстройку для парсера, позволяющую выбрать, откуда парсить подсказки. и очень большая просьба рассмотреть и реализовать это как можно быстрее )
и да, забыл написать, есть большая разница в количестве подсказок, которые получаются по ссылкам. возьмите для примера кей "seven card stud to". апарсер по нему получит 10 подсказок, а по второму линку можно получить 19 подсказок. я так понимаю, по второму линку гугл отдаёт всё, что знает, а первый это так, чтобы помещалось на экране у юзера.
ещё одну штуку заметил, параметр client должен быть chrome, иначе будет выдаваться максимум 10 результатов.
Смысл парсига подсказок в том, чтобы получить не максмимум каких-то подсказок, а в том чтобы получить максимум подсказок, которые гугл отдает всем пользователям, поэтом и нужно парсить именно https://www.google.ru/complete/search.
смысл парсинга подсказок в том, чтобы получить максимальное количество не бредотекстовых подсказок. мне без разницы что там гугл отдаёт всем пользователям, т.к. я уже в первом посте описал, какие какашки он там отдаёт. с тем же успехом можно брать имеющиеся у тебя кеи и добавлять к ним рандомные слова, получишь те же результаты.
Нужно просто доработать парсер подсказок и опционально дать пользователю возможно не брать "искусственные" подсказки. Но в любом случае нужно брать https://www.google.com/complete/search Сделать это можно, так: например, есть такой ответ от https://www.google.com/complete/search Код: )]}' [[["тест\u003cb\u003e на iq\u003c\/b\u003e",0,[131]],["тест\u003cb\u003eо для пиццы\u003c\/b\u003e",0],["тест\u003cb\u003eо на вареники\u003c\/b\u003e",0],["тест\u003cb\u003eо на пельмени\u003c\/b\u003e",0],["тест\u003cb\u003eо на блины\u003c\/b\u003e",0],["тест\u003cb\u003eы\u003c\/b\u003e",0],["тест",0],["тест\u003cb\u003eо на чебуреки\u003c\/b\u003e",0],["тест\u003cb\u003eо на пирожки\u003c\/b\u003e",0],["тест\u003cb\u003eостерон\u003c\/b\u003e",0]],{"i":"slot real money x","q":""}] Все подсказки у которых второе значение после текста >0 - искусственные, а все у которых 0 - человеческие. В моём примере, все подсказки человеческие так как содержат 0, а вашем примере: Код: )]}' [[["slot real money xbox one",33,[160],{"zh":"x\u003cb\u003ebox\u0026nbsp;one\u003c\/b\u003e"}],["slot real money xbox",33,[160],{"zh":"x\u003cb\u003ebox\u003c\/b\u003e"}]],{"ap":"slot real money ","i":"slot real money x","q":""}] все подсказки искусственные, так как второе значение 33 >0 Я этот парсер давно для себя переписал на JS и у меня всё ок
я конечно за тебя очень рад, что ты переписал его на js ) но тут есть тоже свои нюансы, причём отличия довольно большие. как объяснить разницу в количестве результатов ? апарсер сейчас может спарсить только 10 результатов. а по тому линку, что я предложил, можно спарсить все доступные результаты, которые гугл может предоставить. так что тут можно ещё поспорить, стоит ли "в любом случае" брать тот линк, по которому сейчас парсит апарсер. я вообще не понимаю, как можно спорить на эту тему, если по предложенному мной линку парсится больше кеев и они все не искусственные, тогда как по имеющемуся в апарсере линку парсится только 10 кеев, и то, часто парсится всякая несуразная фигня. не вижу даже смысла оставлять старый источник парсинга, если предложенный мной вариант во всём лучше. я даже не могу представить себе задачу, при которой парсить меньше ключей было бы лучше, чем парсить больше ключей. я, как дорвейщик, понимаю, что время незасранных тематик в гугле прошло года 3 назад, и тот, кто имеет кучу нч кеев всегда будет получать в разы больше того, кто ориентируется только на сч и вч. я потому и предложил добавить мой вариант в качестве второго источника парсинга, чтобы был выбор - парсить меньше, но высокочастотку вперемешку со всякой ересью, либо парсить всё что есть и без всякой фигни.
Хорошее решение, я за! ) p.s. Источников данных можно найти много, например теже подсказки аплстора можно тянуть с разных мест, только вопрос - на**я, если всё равно придется делать тысячи, десятки тысяч запросов, чтобы перебором вытянуть все подсказки, там уже не важно 10 результатов, 20, 30. Главное это достоверность данных и хотя бы уверенность в том, что источник данных не обосрется через год, чтобы не нужно было лезть и переписывать парсер. 1. Как вы верифицируете ваш источник данных сейчас, через полгода, через год? Кто будет проверять, что данные с второго урла совпадают с данными с первого урла? 2. Откуда этот урл и где используется обычными пользователями?
1. точно так же, как это реализовано сейчас - никак. нигде на ресурсах апарсера даже не написано, как обходить искусственные подсказки гугла, о какой проверке совпадения данных может идти речь ? кто с подсказками работает, тот и проверит. 2. урл из известного забугорного парсера лонгтейл кейвордов keywordshitter
Было бы классно что-то подобное от команды апарсера увидеть либо стандарнтый парсер переписать для парсинга "человеческих" подсказок
Ранее Гугл отдавал подсказки в своих сервисах при запросе на домен suggestqueries.google.com. Он же использовался и в парсере. Но года 2-3 назад Гугл везде изменил домен на www.google.com, и в соответствии с этим были внесены изменения в парсер. Хотя на данный момент оба домена вроде как работают одинаково и на результат не влияют. Относительно результатов. На них в первую очередь влияет параметр client. Сейчас в парсере используется значение psy-ab, по аналогии с поисковиком. Т.е. парсер собирает те же подсказки, что видит пользователь в поисковике. В 1-м посте речь идет о client=chrome. По всей видимости это аналог client=chrome-omni, который используется при получении подсказок в адресной строке браузера Chrome. По крайней мере различий не было замечено. Выдача в данном случае действительно отличается от psy-ab, как по содержимому, так и по количеству. Исходя из вышеописанного, можно добавить в SE::Google::Suggest выбор значения для параметра client. Относительно "искусственных"/"человеческих" подсказок. Можно также добавить еще одну переменную в массив результатов. И при client=psy-ab заносить туда значение 1/0 по совету из 6-го сообщения. Но тогда остается открытым вопрос, что писать в эту переменную при client=chrome. Спойлер: Пример ответа при client=chrome Код: [ "пого", [ "погода", "погода чикаго", "погода в бруклине", "погода в москве", "погода филадельфия", "погода в бостоне", "погода в миннеаполисе", "погода нью йорк", "погода киев", "погода москва", "погода в майами", "погода в лос анджелесе", "погода вашингтон", "погода майами", "погода на завтра", "погода в ташкенте", "погода в сакраменто", "погода в орландо", "погода минск", "погода львів" ], [ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" ], [], { "google:clientdata": { "bpc": false, "tlw": false }, "google:suggestrelevance": [ 1250, 601, 600, 566, 565, 564, 563, 562, 561, 560, 559, 558, 557, 556, 555, 554, 553, 552, 551, 550 ], "google:suggesttype": [ "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY", "QUERY" ], "google:verbatimrelevance": 851 } ] Собственно варианта скорее всего 2: либо значения из google:suggestrelevance, либо из google:suggesttype. Но в google:suggesttype ничего другого, кроме QUERY не было замечено, поэтому возможно смысла выводить данные из этого массива нет. Какие значения больше нужны и замечал ли кто-то что-то другое в google:suggesttype?
да, действительно, на выдачу влияет именно клиент, спасибо. по поводу выдачи значений в переменную при client=chrome. а зачем они там вообще нужны, если выдача там не искусственная и отделять "людей от коней" не нужно ? просто сделать переменную пустой да и всё.
Вот как раз, чтобы не пустовала, то можно что-то более-менее полезное в нее писать. Например, ту же релевантность (google:suggestrelevance), по которой, кстати, можно определять насколько подсказка релевантна запросу.
ну можно конечно и релевантность, но в условиях сбора большого количества подсказок будет неясно, какому именно запросу она будет релевантна, если она встретится у нескольких запросов ) это если обучать какую-нибудь свою нейросеть на основе алгоритмов релевантности подсказок самого гугла, тогда да, пригодится ))
был неправ. сегодня заметил, что кроме QUERY в suggesttype может прилететь NAVIGATION, в случае если в качестве подсказки будет урл на какой-то сайт, так что можно действительно туда писать QUERY или не QUERY, чтобы отсеивать подсказки от всякой фигни. вот json-пример ответа вместе с запросом. Спойлер: запрос с ответом http://suggestqueries.google.com/complete/search?client=chrome&hl=en&gl=us&callback=?&q=buy essay online array ( 0 => 'buy essay online', 1 => array ( 0 => 'buyessayonline.org reviews', 1 => 'http://buyessayonline.org', 2 => 'buy essay online login', 3 => 'buy essay online reddit', 4 => 'buy essay online reviews', 5 => 'buy essay online australia', 6 => 'buy essay online promo code', 7 => 'buy essay online safe', 8 => 'buy tok essay online', 9 => 'buy extended essay online', 10 => 'buy argumentative essay online', 11 => 'buy an essay online now', 12 => 'buy essay writing online', 13 => 'buy custom essay online', 14 => 'buy admission essay online', ), 2 => array ( 0 => '', 1 => '', 2 => '', 3 => '', 4 => '', 5 => '', 6 => '', 7 => '', 8 => '', 9 => '', 10 => '', 11 => '', 12 => '', 13 => '', 14 => '', ), 3 => array ( ), 4 => array ( 'google:clientdata' => array ( 'bpc' => false, 'tlw' => false, ), 'google:suggestrelevance' => array ( 0 => 602, 1 => 601, 2 => 600, 3 => 561, 4 => 560, 5 => 559, 6 => 558, 7 => 557, 8 => 556, 9 => 555, 10 => 554, 11 => 553, 12 => 552, 13 => 551, 14 => 550, ), 'google:suggesttype' => array ( 0 => 'QUERY', 1 => 'NAVIGATION', 2 => 'QUERY', 3 => 'QUERY', 4 => 'QUERY', 5 => 'QUERY', 6 => 'QUERY', 7 => 'QUERY', 8 => 'QUERY', 9 => 'QUERY', 10 => 'QUERY', 11 => 'QUERY', 12 => 'QUERY', 13 => 'QUERY', 14 => 'QUERY', ), 'google:verbatimrelevance' => 1300, ), )
Начиная с 1.2.404 в SE::Google::Suggest произошли следующие изменения: добавлена возможность выбирать источник подсказок: параметр Client, по-умолчанию имеет значение Chrome omnibox в массив результатов $results добавлена переменная $type, в которой содержится информация о типе подсказки: 0 - человеческая, 1 - искусственная добавлен параметр Follow suggests, который позволяет выбрать, какие подсказки подставлять в запросы при парсинге в глубину
отличная новость, благодарю ) а насчёт предыдущего моего сообщения что-то решили ? про QUERY и NAVIGATION которое.
На момент появления сообщения уже были внесены изменения в парсер, поэтому пока что будет так. Тем более, для client=psy-ab нету в ответе аналога suggesttype. Судя из переписки выше, NAVIGATION - это ссылки, остальное всегда QUERY. Вы можете просто фильтровать получаемые подсказки, к примеру такой регуляркой: Код: ^https?://.+