Я некоторое время изучаю Python, и у меня есть некоторое представление о краулерах и внутренней структуре, но все они написаны другими, когда они учатся, и они чувствуют, что они не являются моими собственными знаниями. В прошлом году я предложил NetEase Cloud Music сортировать по количеству воспроизведений или популярности, но меня это определенно не смутило.Из-за проблем с авторскими правами NetEase Cloud Music я снова начал использовать QQ Music. , конечно. В нем по-прежнему нет этой функции. Так что я просто должен сделать это сам...
Цель
Сначала возьмите эти плейлисты,Во-первых, вы можете выбрать несколько песен из большого плейлиста для прослушивания, когда у вас нет песен для прослушивания.,Во-вторых, собрать данные самостоятельно, просто проанализировать их и ознакомиться с технологией.. Так что мне нужно знать хотя быназвание списка песен,Время плейлиста, а затем проанализируйте, какой тип метки требуется, но это не обязательно точно, поэтому он добавлен только для справки. Требуемые окончательные данные:
class QQMusicItem(Item):
# 歌单名
songSheet = Field()
# 作者
authorName = Field()
# 播放次数
playTimes = Field()
# 创建时间
createTime = Field()
# 标签
tags = Field()
# 介绍
introduce = Field()
Сканирование музыкального плейлиста QQ
сначала дайисходный код, код далее по тексту выкладывать не буду, так как в коде обхода данных нет строк повторного использования, и есть разные способы реализации, в основном реализация идей. В дальнейшем мы будем использовать решение ступенчатой ямы в качестве подсказки для достижения цели.
Откройте веб-версию QQ Music.Категория ПлейлистИнтерфейс, на первый взгляд, если проанализировать исходный код веб-страницы, можно увидеть следующий рисунок:
Когда я его нашел, я подумал, что это то же самое, что и обычные данные сканирования, и я могу просто посмотреть на содержимое его ярлыка и заполнить его.Да я не знаю, насколько глубока яма, не наступив на нее. Да, это явно не удается, ни единого фрагмента данных. Распечатайте посещенную веб-страницу, посмотрите название этого класса и обнаружите, что его нет.Да я просто попал в яму.
Так вроде использует динамическое заполнение, потом должно вызывать интерфейс, запрашивать данные, потом искать, искать в сети в инспекции и наконец находить:
Я не знаю, как найти этот интерфейс, пожалуйста, просветите меня, если вы его знаете
Получил большую часть данных здесь,Доступны название списка песен, имя автора, количество воспроизведений и время создания.. То есть толькоЭтикетки и введение нет, Эти данные можно найти, нажав на детали каждого элемента. На этот раз я умный, поэтому я не написал это напрямую. Сначала я зашел в интерфейс, чтобы получить детали. Данные должны быть заполнены, и тяжелая работа окупилась, позвольте мне найти ее~
Да, в этих данных есть теги и интродукции.
Прочитав несколько коротких предложений, я нашел его.На самом деле, я не знаю навыков этого процесса, поэтому это все равно заняло много времени, и это было в том числе потому, что я не был знаком с ним.
Потом это получить все данные плейлиста постраничным пейджингом.Так как каждая страница это интерфейс для настройки,то это проще.Я зашел на вторую страницу чтобы проверить интерфейс для запроса данных на второй странице.По сравнению с первой страницей я обнаружил, что на самом деле это были последние два изменения, вызванные параметрами (sin (начало) и ein (конец)). В процессе наблюдения за параметрами этого интерфейса обнаруживается, что у него меняется параметр rnd, поэтому эти три параметра нужно динамически менять при запросе данных для каждой страницы.
Затем я перекодирую, получаю данные, обрабатываю строковый формат json для программирования данных, конвертирую его в словарь, а затем просматриваю, чтобы получить необходимые данные. После записи и выполнения обнаруживается, что доступ к интерфейсу невозможен.В это время может быть, что заголовок нужно дополнить параметрами, а потом посмотреть данные, чтобы не было ошибок и добавить почти все параметры.Среди них , я думаю, что реферер важнее. Интерфейс для каждой страницы реферера может исходить от главной страницы плейлиста, но источником деталей является страница подробностей, а параметр содержит id плейлиста.Этот id можно получить из данных каждого элемента на каждом страница, такая динамичная Просто измените ее и, наконец, удалите некоторые менее важные параметры.Например, здесь я удаляю только loginUin.
Затем напишите код, после отладки, наконец, удалось.
Наконец, я сохранил его в виде файла csv, отсортировал по количеству воспроизведения, перехватил 20 лучших и получил следующую картину.
Сканирование данных здесь завершено.
анализировать данные
После того, как данные получены, следующие данные были просто обработаны выше, то есть для просмотра 20 лучших плейлистов.
Затем я хочу увидеть приблизительное распределение количества воспроизведений, например, сколько воспроизведено более 50 миллионов раз, сколько 10 миллионов, 5 миллионов, 1 миллион, 500 000, более 100 000 и менее 100 000. Затем нарисуйте гистограмму, чтобы увидеть, что происходит.
Да, для обработки этих данных используются numpy и pandas и matplotlib. После анализа получают следующие результаты:
Анализ количества игр
Интуитивно понятно, что плейлистов с более чем 5 миллионами воспроизведений очень мало. По пропорции хорошо видно, что более 2300 плейлистов ниже 100 000, что все еще относительно много.После этого мы далее проанализируем распределение времени создания этих более чем 2300 плейлистов, и мы не будем продолжить анализ здесь.
Анализ тегов
Для тегов или чего-то еще я подумал об использовании облаков слов ниже, и я могу интуитивно видеть, какие слова появляются чаще. Какие плейлисты в основном популярны. После кодирования получаем следующий результат:
Может быть, можно многое узнать, посмотрев на него напрямую, но он все еще не очень подробный. Я снова упорядочил его, и ниже перечислены первые десять тегов в порядке убывания ~
[('流行', 1834), ('英语', 1669), ('国语', 1386), ('电子', 723),
('日语', 552), ('民谣', 369), ('ACG', 347), ('影视', 337),
('治愈', 337), ('韩语', 330)]
Давайте сначала проанализируем так много, а затем проанализируем распределение времени создания, когда у вас будет время.
Пожалуйста, дайте мне знать, если я ошибаюсь~
Наконец, продвигайте егомой блог, я просто написал его не так давно, и большинство предыдущих статей были перенесены из моей предыдущей короткой книги. После этого технологии, связанные с Android, Java и Python, будут время от времени обновляться.