Как стать автором
Обновить

Комментарии 60

>> На данный момент точное число приложений не известно, но судя по тенденции, оно не более 50 тысяч.<<
По официальным данным на 600 тысяч больше
Вы видите графики, как как падает «производная». Это только предположение.
К сожалению до него парсер еще не дошел, весит в списке заданий.
Как же так! висит же! Мозг-проказник.
Bard's Tale под тегру весит 3+ гига.
Но для него ассеты выкачиваются после установки самого приложения, так что не знаю, насколько честно так судить.
Тогда это не приложение, а ресурсы. Статистика идет по обьему указанному в маркете.
Это я понял (вряд ли есть возможность проверить ресурсы заранее). Моя мысль в том, что довольно многие игры эти ресурсы выкачивают отдельно. Но в любом случае считать что Темный Рыцарь весит больше, т.к. выкачивает все сразу — странно.
Имелась в виду память в внутренней памяти, из коробки.
Очень хотелось бы конечный результат узнать. Поторопились вы с постом :)
Вероятно. Просто не спал пару дней, а под конец еще и это написал. Последние несколько часов смотрю как обновляется инфа и всякие графики рисую.
Для меня это как наблюдать за процессом установки софта, думал может кто то тоже захочет..)
Ну тогда обновляй почаще! Буду следить за постом. Ещё бы количество установок проверять неплохо.
А как? Гугл ради кеширования не дает точного числа. Ваши идеи?
Сохранять range-ы, да и всё. Потом дать статистику, мол, 1k-5k столько-то приложений, 1m-5m — столько-то.

P.S.: «андроид».
Готово, пока запоминаю строкой, позже переведу в индексы.
Пропущенные приложения обновлять не буду — хочу быстрее увидеть масштабы, но боюсь быть забаненым гуглом.
С вашей подачи решил еще запоминать рейтинг, цену и производителя.
Можно будет потом отсортировать страницы по рейтингу, найти самого богатого производителя, общую сумму потраченную населением земного шара на приложения.
И самое прикольное для меня — прибыль с одного скачанного мегабайта, для гугл.
Вы эти данные не посчитаете. Во-первых точное число установок неизвестно. А когда разница между минимальным кол-вом и максимальным несколько миллионов это значительно. Во-вторых цены на программы меняются, а вы снимите только текущие значения.
Да, и? Напишу минимально, домножив на .9
p.s спасибо кэп
Готово. 160982
Еще интересная цифра:
Все найденные приложения(18500) занимают чуть больше 70G
Я тоже парсил этот каталог, мы нашли не более 200 тыс. приложений. Но у нас метода была не очень эффективная, наверняка кто-нибудь придумал как всё спарсить.
А про техническую часть расскажете? Используете ли прокси?
Про техническую? Хм…
Запросы идут посредством fopen и stream_context_create
Регекспы подбирались в реалтайм парсере: Regex Builder
Как устроена база данных? Для дела используется три таблицы: task(id, name), founded(id, name), data(id, name, updated_time, found_time, recheck_time, size, email, downloads). Как делать SQL запросы надеюсь пояснять не нужно.
В остальном все вроде понятно…
Прокси не использую, парсер скачивает в режиме 10 запросов, отдых секунда. Под нагрузкой хабра на все добро стало тратиться порядка 9 секунд, это значит что средняя скорость 1 запрос в секунду.
Ах, да, еще. Нет смысла делать скачивание в несколько потоков, так как мой VPS имеет всего 400MHz, и больше всего времени тратится на поиск регекспов. Можно конечно прооптимизировать, и искать вручную, но меня пока все устраивает: порядка 80.000 приложений в день.
Как вы выбирали начальную точку откуда начинать парсить и каков порядок обхода всех приложений?
Посмотрел скачанные у меня приложения, и субьективно решил какое из них лучше всего. Какого разработчика я больше всего уважаю.
Порядок прямой — если приложение еще не было найдено, добавить задание. Обработка по очереди.
Информация берется в том порядке что записана на странице, т.е сначала обработаются все приложения разработчика, потом похожие. Вроде не напутал.
Что-то мне всё равно непонятно.
И как таким способом можно обойти все приложения в Google Play, чтобы никого не забыть?
НЛО прилетело и опубликовало эту надпись здесь
^, Правда гарантий что никого не забудем нет. Просто если приложение не найти ни в основном каталоге, ни в похожих, то его честно можно опустить, так как пользователи не найдут тоже.
А можно про алгоритм поиска в основном каталоге поподробнее?
Есть несколько категорий, для каждой есть понятие страницы.
Спасибо за исчерпывающий ответ!
Простите, думал это очевидно. К тому же я был с телефона… Спешу исправиться!
В google play есть несколько категорий. Одна из них
В них есть под категории, они нас и интересуют. К примеру казуальные.
В нем есть два раздела(как и везде): платные и бесплатные.
Посмотрим как меняется адрес при смене страницы:
Вторая: https://blabla/topselling_free?start=24&num=24
Третья https://blabla/topselling_free?start=48&num=24
Заметим так же, что на странице всего 3 столбца и 8 строк(всего 24). Логично предположить что числа 24 и 48 — порядковые номера первого приложения(начиная с нуля).
Давайте попробуем поставить 20, действительно, четвертое приложение совпадает с 24 на второй странице.
Надеюсь теперь стало понятно, иначе я готов обьяснить еще подробнее. Простите если перешел на совсем просто язык, я не знаю в каком моменте вам становится непонятно, решил подстраховаться. В будущем пожалуйста задавайте наводящие вопросы.
P.S как оказалось num ни на что не влияет.
Теперь намного понятнее, спасибо
А ничего незнаете про бан гугла парсеров? Сколько разрешает запросов делать и т.п.?
Не знаю, у меня в пике было 3 запроса в секунду.
А вы вкурсе, что есть аппликации доступные только для определенной страны? Я просто хочу сказать, что возможно ваша конечная статистика будет не полной.
Как то забыл про это, пока не буду заморачиваться, иначе скорость упадет в разы. Лучше в следующий раз выполню поиск через другой сервер.
Самое маленькое приложение 1.002kb? У вас парсер неверно настроен, там запятая для отделения тысячного разряда используется на самом деле. Так что ваше «самое маленькое приложение» весит 1002kb. И на маркете куча приложений полегче этого будет.
Поправил вручную, действительно, множество приложений с размером меньшим 2Kb содержали эту ошибку.
Писал в свое время парсер Google Play на python с использованием grab (http://grablib.org)

P.S. Регулярки для разбора HTML — зло, и это не раз обсуждалось
в данном случае все окей, гугл выдает страницы под копирку.
А гугл не должен метать молнии с целью поражения?
www.google.com/mobile/android/market-tos.html
3.3 You agree not to access (or attempt to access) Google Play by any means other than through the interface that is provided by Google, unless you have been specifically allowed to do so in a separate agreement with Google. You specifically agree not to access (or attempt to access) Google Play through any automated means (including use of scripts, crawlers, or similar technologies) and shall ensure that you comply with the instructions set out in any robots.txt file present on the Google Play website.

Поосторожнее с такими экспериментами.
Дельный комментарий. Но я думаю, пока автор не шлет 1000 запросов в секунду и не пытается клонировать Google Play, то гиганту все равно.
Да конечно, а в google play правило сохранилось?
Могу отвечать только раз в час, поэтому сразу несколько ответов в одном посте.

> Я тоже парсил этот каталог, мы нашли не более 200 тыс. приложений. Но у нас метода была не очень эффективная, наверняка кто-нибудь придумал как всё спарсить.

Подсказываю по поиску всех приложений. Там есть поиск. Перебираются все сочетания буквенные и цифровые, A, AA, AB и т.д., выдача поиска содержит ограниченное число приложений. Все парсим, получаем кучу market_id для приложений, парсим страницы приложений. Я набирал что-то около 400+ тысяч.

> Ах, да, еще. Нет смысла делать скачивание в несколько потоков, так как мой VPS имеет всего 400MHz, и больше всего времени тратится…

Смысл есть. Почитайте статьи по grab на том же хабре. Ну и про регекспы для парсинга уже было сказано. Используйте xpath, cssselect или что-то подобное, работающее с dom. Будет надежней и в разы быстрей.
Мне уже удалось прооптимизировать до такой степени, что на 100 запросов тратится:
49.977870941162 Download: (48.16% + 3.72%), Regexp: 0.88%, Query: 47.12%
Жалко, что это огромное количество никак не отражает качество… Регулярно просматриваю на досуге маркет, в поисках занимательных игрушек или интересных приложений каких-нибудь, и очень редко нахожу что-то стОящее. В основном, треш и наколенные поделки, а то и вредоносные приложения… В разделе платных программ ситуация, конечно, получше, но цены иногда отпугивают :)
Я просматриваю еженедельный дайджест новых игр на 4pda.
Читаю краткое описание, отзывы, обычно есть и ссылки на геймплей в youtube.
Число приложений больше не обновляется (видимо спарсил): итог 57 992. Что-то мне подсказывает, что приложений больше (в том числе, как уже писали выше, из-за недоступности в разных странах).
Да они разбросаны по разным странам. НО, если вы начнете перебирать по странам то будете (не)приятно удивлены что там частые пересечения :) и кол-во приложений будет примерно такое же :)
Вероятно гугл метнул молнию. Приеду, исправлю и все пропущенные добавлю в очередь.
Тоже как то парсил Google Play для американского рынка, Набросал на C# консольное приложение страницу парсил используя HtmlAgilityPack (XPATH), правда делал не поиск по AAA AAB и т.п, а сначала выбирал все с главной из категорий, потом со страницы приложения переход на все страницы компании, потом на все related и так по кругу. Эффективная выборка шла не больше 8 часов, (на Ноутбуке с 1,6GHz), дальше пошли повторения которые отсекались и особого прироста не было, поэтому остановил. итог: ~32К
Повторения у меня отклоняются by design
Парсер не интересно. Если хочется еще не поспать — попробуйте написать качалку приложений из GP. Не с андроида и не с эмулятора ;)
Не думаю что кроме хака протокола там имеются проблемы.
В ходе ошибки было пропущено сохранение 43084 приложений, сейчас они все добавлены в очередь заданий.
<guru_mode>
Спешил, прооптимизировал запрос и убежал, толком не проверив. А он дал сбой по foreign key. Сейчас вьюхой все исправил.
</guru_mode>
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории