Веб-краулер Python — сканирование обзоров облачной музыки (4)

Python

"Это 4-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г."

Давайте сначала рассмотрим содержание вчерашней статьи: 1. Найдите целевое местоположение, 2. Загрузите веб-страницу, 3. Установите скорость загрузки и найдите целевой файл. Просто откройте песню Netease Cloud

https://music.163.com/#/song?id=25723157

Идентификатор каждой песни — это строка чисел, стоящих за ней. Так что, в принципе, мы можем получить идентификационный номер, если соберем соответствующие песни и зайдем на страницу воспроизведения. Это позволяет легко зацикливать и сканировать все комментарии для нескольких песен.

def get_comments(url):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36',
        'referer': 'http://music.163.com/'
        }

    params = "EuIF/+GM1OWmp2iaIwbVdYDaqODiubPSBToe5EdNp6LHTLf+aID/dWGU6bHWXS0jD9pPa/oY67TOwiicLygJ+BhMkOX/J1tZMhq45dcUIr6fLuoHOECYrOU6ySwH4CjxxdbW3lpVmksGEdlxbZevVPkTPkwvjNLDZHK238OuNCy0Csma04SXfoVM3iLhaFBT"
    encSecKey = "db26c32e0cd08a11930639deadefda2783c81034be6445ca8f4fbedd346e1f9567375083aeb1a85e6ad6d9ae4532a49752c2169db8bcc04d38a79f9bed7facea42ee23f1b33538c34f82741318d9b4b846663b53b0b808dd0499dccfbc6c61fbf180c6fb24b1c2dd3c2c450ce09917d74be9424dab836fd2e671988ffbc6ae1b"
    data = {
        "params": params,
        "encSecKey": encSecKey
        }

    name_id = url.split('=')[1]
    target_url = "http://music.163.com/weapi/v1/resource/comments/R_SO_4_{}?csrf_token=".format(name_id)

    res = requests.post(target_url, headers=headers, data=data)

    return res

params и encSecKey — это данные, которые нужны серверу, эти два — зашифрованное содержимое. Полученный файл core.js, поскольку файл js очень большой, мы можем получить его по ключевому слову encSecKey и найти сегмент кода ключа. Точно так же эти два параметра в POST можно использовать и в других песнях.

image.png

После того, как комментарии найдены, нам нужно извлечь ключевые данные. Мы видим, что просканированные данные представлены в формате JSON. JSON — это облегченный формат обмена данными, который часто используется при передаче по сети.

Строки можно восстановить в структуры данных Python с помощью метода JSON.LOADS():

comments_json = json.loads(res.text)

Таким образом, значением ключа «hotComments» в словаре являются все замечательные комментарии!

def get_hot_comments(res):
    comments_json = json.loads(res.text)
    hot_comments = comments_json['hotComments']
    with open('hot_comments.txt', 'w', encoding='utf-8') as file:
        for each in hot_comments:
            file.write(each['user']['nickname'] + ':\n\n')
            file.write(each['content'] + '\n')
            file.write("---------------------------------------\n")

На этом этапе, объединив предыдущие части, мы можем получить желаемый эффект!

image.png

Кроме того, NetEase Cloud Music Форма интерфейса API выглядит следующим образом:music.163.com/API/V1/Горячая вода…

Следует отметить, что если частота сканирования слишком высока, а их количество слишком велико, сервер заблокирует IP-адрес. Поэтому для более полного проекта сканера необходимо настроить прокси и пул IP-адресов.

Кроме того, друзья, которые не хотят быть одержимыми взломом параметров формы сообщения, могут попытаться смоделировать пользовательские операции способом python + selenium + PhantomJs. После нажатия на страницу, затем непосредственно проанализируйте элементы страницы, чтобы «видимые и легкость подъема» может быть достигнута, но эффективность будет немного ниже.