Просто изучив поисковый робот python, я хотел продолжить поиски и нашел эту NetEase Cloud Music, потому что я обычно использую ее для прослушивания песен и люблю читать комментарии к песням, поэтому я сканирую комментарии NetEase Cloud Music, а затем запускаю Bar!
официально войти в тему
Сначала найдите целевую страницу и начните анализировать структуру страницы следующим образом.
Три стрелки вверху — это все данные, которые вы ищете, а именно пользователи комментариев, комментарии и лайки, все это можно найти с помощью регулярных выражений.Далее продолжайте искать, как найти данные на следующей странице, или используйте инструменты разработчика. , Но при нажатии на следующую страницу URL-адрес веб-страницы не меняется, что указывает на то, что веб-страница загружается динамически, поэтому данные не могут быть найдены на текущей веб-странице, они должны быть в егоxhrНайдите его в файле, поэтому нажмитеnetworkВзгляните, а затем щелкните следующую страницу, чтобы посмотреть, я действительно хочу то, что хочу
Когда я увидел это, я был взволнован, чтобы ввести код.
Один щелчок, результат ничего, но его код состояния 200, явно запрашивает успех, но возвращать нечего, заходим в NetWork, смотрим на эту страницу, видим его Пост-запрос, и я его тоже видел. два параметра Params и ENSSECKEY
Как только я увидел это, плотные цифры и буквы, я догадался, что это должно быть зашифровано, но вы можете скопировать его, чтобы увидеть, пригодится ли оно. Далее взгляните на его ответ, эй, это json, а не html структура, поэтому вам нужно использовать библиотеку Json для разбора
Теперь начните вводить код, сначала скопируйте два вышеуказанных параметра и посмотрите.
Теперь получите комментарии пользователей, лайки и комментарии для каждого комментария
Видно, что после преобразования данных в словарь в формате python методом json.loads() нужные данные можно получить, но как получить следующую страницу? Нельзя каждый раз копировать и вставлять эти два параметра, верно? Единственный выход — перестать лезть. . как это возможно? Мое продолжение, то мне надо взломать эти два параметра, тогда я смогу продолжить читатьсеть,Поскольку он должен быть зашифрован, он должен быть зашифрован с помощью js.
Посмотрите core.js, инициатор сайта только сейчас, а затем скачайте файл и не спеша изучите его.
После сохранения украсьте, а затем найдите параметр encSecKey (ps: JSj'e'tong'yang'de URL-адрес украшенияWoohoo. CSS88.com/tool/ это _Bea…
Видя, что метод window.asrsea() имеет четыре параметра, давайте проигнорируем эту функцию и посмотрим, какие у нее четыре параметра.Нет необходимости изучать, откуда четыре параметра берутся отсюда, просто знайте, что он есть Что, тогда мы можем добавить некоторый код, чтобы он отображался, чтобы использовать fiddler для отладки
Добавьте код следующим образом
Вы можете получить каждый из вышеперечисленных параметров отдельно, а также получить параметры для просмотра, а затем работать со скрипачом следующим образом.
После выполнения вышеуказанных настроек обновите веб-страницу, и вы сможете найти информацию о параметрах в консоли.Если нет, это связано с тем, что она была кэширована при просмотре веб-страницы ранее, поэтому вам необходимо очистить файл кеша (он включен при очистке записи браузера)
В риде есть id этой песни, который явно связан с комментарием.Попробовав перелистнуть несколько страниц, я обнаружил, что смещение равно количеству смещений комментария, смещение равно (страницы-1)*20, а total на первой странице true, false на остальных страницах
Тот же метод также получает второй параметр: 010001.
Четвертый параметр: 0CoJUm6Qyw8W8jud.
Далее нам нужно посмотреть, что делает метод window.asrsea(), или вы можете увидеть это, посмотрев файл js
Изучая я, случайным образом получаю шестнадцать символов, а функция bAES-шифрование, где смещение0102030405060708, режим естьCBC, оглядываясь назад на функцию d, гдеparams шифруется два раза подряд, при первом шифровании,Текст является первым параметром. Ключ — четвертый параметр, текст во второй шифровке — значение первой шифровки, а ключ — случайное число a. в то время как encSecКлюч — это шифрование RSA, его открытый ключ — второй параметр, режим — третий параметр, а текст — случайная строка a.
Наконец-то закончил разбор, а потом начал набирать код
Начнем с кода для получения первой страницы комментариев
Вот класс, который получает два параметра
Это класс для разбора облачной музыки NetEase и получения комментариев
Однако, когда я щелкнул, чтобы запустить, это сразу дало мне ошибку:TypeError: can't concat str to bytes
Оказывается, во втором шифровании params — это байтовый тип, поэтому его можно преобразовать в строковый тип.
Нажмите, чтобы запустить еще раз, и результат все равно будет ошибкой:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Эта ошибка связана с тем, что мой анализ json неверен. Я оглядываюсь назад и отлаживаю его.Веб-страница возвращает что-то пустое, но его код состояния — 200., Что это, черт подери, такое? Затем я попытался скопировать значения двух параметров напрямую, как и раньше, и результат был успешным, что означает, что мой процесс шифрования был неправильным, а затем я вернулся и прочитал несколько статей, но я не смог увидеть никаких ошибок. В Интернете Baidu нашел эту статью о Чжиху.https://zhuanlan.zhihu.com/p/32069543, я скопировал ее код и запустил, результат ок, буду дальше видеть разницу между мной и ней, получается что яЯ использовал неправильные 16 случайных символов.Я дал два разных в двух параметрах, но мне нужно было дать общий., когда я увидел это, я вернулся и изменил его напрямую. Конечно, он успешно запустился, и я не буду публиковать код. Эффект выглядит следующим образом.
Далее нужно получить комментарии каждой страницы, и каждая страница связана со смещением первого параметра, и формуласмещение=(страницы-1)*20, total верно на первой странице и false на остальных страницах
А для записи в базу использую операцию своей статьи
, так как место слишком длинное, размещать не буду.Если интересно, можете зайти и посмотреть
Следующим пунктом является запуск, но это исключение возникает при запуске до восьмой страницы
raise errorclass(errno, errval)
pymysql.err.InternalError: (1366, "Incorrect string value: '\xF0\x9F\x92\x94' for column 'content' at row 1")
Причина в том, что этот комментарий имеет неузнаваемое выражение, а затем Baidu ссылается на эту статьюblog.CSDN.net/H HT NaN/Ariti…
Это эффект базы данных домашней страницы
Получить полный
Она наконец-то завершена.Хотя это тяжелая работа, она того стоит.Я также многому научился в процессе.Я ссылался на две статьи при написании этой статьи.Одна из них - первый ответ Zhihu.Ууху. Call.com/question/36…
Статья была впервые опубликована в общедоступном аккаунте [Daily Learning Python]. Отсканируйте приведенный ниже QR-код, чтобы подписаться на меня и посмотреть другие интересные статьи.