이 글에서는 NetEase Cloud 음악의 뜨거운 리뷰를 포착하기 위해 Python3 실용적인 크롤러에 대한 관련 정보를 주로 소개합니다. 이 글은 샘플 코드를 통해 매우 자세하게 소개합니다. 공부나 업무에 필요한 모든 사람에게 확실한 참고 학습 가치가 있습니다. 아래 에디터와 함께 배워보세요.
머리말
저는 이제 막 Python 크롤러를 시작했고, 반달 정도 Python을 작성하지 않아서 잊어버릴 뻔했습니다. 그래서 간단한 크롤러를 작성하여 연습해 보기로 했습니다. NetEase Cloud Music의 가장 큰 특징은 정확한 노래 추천과 독특한 사용자 리뷰라고 느꼈기 때문에 NetEase Cloud Music 인기곡 목록에서 뜨거운 리뷰를 포착하기 위해 이 방법을 작성했습니다. . 파충류. 저도 이제 막 크롤링을 시작하게 되었는데, 궁금한 점이나 의견이 있으시면 언제든지 올려주세요.
더 이상 헛소리는 그만~ 자세한 소개를 살펴보겠습니다.
우리의 목표는 NetEase Cloud의 인기곡 순위에 있는 모든 노래의 인기 댓글을 크롤링하는 것입니다.
이를 통해 크롤링에 필요한 작업량을 줄일 수 있을 뿐만 아니라 고품질 댓글도 저장할 수 있습니다.
구현 분석
먼저 그림과 같이 NetEase Cloud 웹 버전을 엽니다.
순위 목록을 클릭한 다음, 화면에서 클라우드 음악 인기곡 목록을 클릭합니다. 왼쪽, 사진과 같이:
먼저 노래를 무작위로 열어서 사진과 같이 특정 노래에 대한 인기 노래 리뷰를 얻는 방법을 알아 보겠습니다. 최근에 좋아하는 노래를 선택했습니다. 예:
입력 후 노래 리뷰를 볼 수 있습니다. 이 페이지 바로 아래에서 다음으로 이러한 댓글을 얻을 수 있는 방법을 찾아야 합니다.
다음으로 웹 콘솔을 엽니다(chrom용 개발자 도구를 엽니다. 다른 브라우저에서도 비슷해야 합니다). 그림과 같이 chrom 아래에서 F12를 누릅니다.
네트워크를 선택한 다음 F5를 눌러 새로고침합니다. 새로 고침 후 얻은 데이터는 다음과 같습니다.
브라우저가 많은 정보를 보내는 것을 볼 수 있는데 어떤 정보를 원할까요? 여기서 상태 코드는 서버 요청의 상태를 나타내는 것으로, 여기서 상태 코드는 요청이 정상임을 의미하는 200과 비정상을 의미하는 304입니다(종류가 많습니다. 상태 코드에 대해 더 알고 싶으면 직접 검색해 보세요. 여기서는 304의 구체적인 의미에 대해 언급하지 않겠습니다. 따라서 일반적으로 상태 코드가 200인 요청만 보면 됩니다. 또한 오른쪽 열의 미리보기를 통해 서버가 어떤 정보를 반환하는지(또는 응답을 보는지) 대략적으로 관찰할 수 있습니다. 이 두 가지 방법을 결합하면 분석하려는 요청을 빠르게 찾을 수 있습니다. 반복적인 검색 끝에 마침내 그림과 같이 노래 리뷰가 포함된 요청을 찾았습니다.
CSDN에서 스크린샷이 명확하지 않을 수도 있지만 R_SO_4_489998494?csrf_token=
라는 POST 요청에서 이 노래가 포함된 노래 리뷰를 찾았습니다. . 더 명확하게 볼 수 있도록 이 블록의 스크린샷을 찍어 보겠습니다.
기본 정보 요청:
요청 헤더:
요청의 양식 데이터:
이 노래에 대한 노래 리뷰가 포함된 요청 URL이 http://music.163.com/weapi/v1/resource/comments/R_SO_4_489998494?csrf_token=임을 알 수 있습니다. 의 첫 번째 부분은 동일하지만 R_SO_4_ 바로 다음에 나오는 숫자 문자열이 다릅니다. 각 노래에는 지정된 ID가 있고 R_SO_4_ 뒤에 오는 것이 노래의 ID임을 추론할 수 있습니다.
제출된 양식 데이터를 다시 살펴보면 params와 encSecKey라는 두 가지 데이터가 양식에 채워져야 한다는 것을 알 수 있습니다. 다음은 큰 문자열입니다. 몇 곡을 변경하면 각 노래의 params와 encSecKey가 서로 다르다는 것을 알 수 있습니다. 따라서 이 두 데이터는 특정 알고리즘에 의해 암호화되었을 수 있습니다.
서버에서 반환되는 댓글 관련 데이터는 json 형식으로 매우 풍부한 정보(해설자 정보, 댓글 날짜, 좋아요 수, 댓글 내용 등)가 포함되어 있으며 그 중 hotComments가 가장 핫합니다. 우리가 찾고 있는 댓글은 그림과 같이 총 15개입니다.
이 시점에서 방향을 결정했습니다. 즉, params와 2개의 매개변수 값만 결정하면 됩니다. encSecKey. 그런데 이 두 매개변수는 특정 알고리즘을 통해 암호화됩니다. 어떻게 해야 할까요? 패턴을 찾았습니다. http://music.163.com/weapi/v1/resource/comments/R_SO_4_489998494?csrf_token= R_SO_4_ 뒤의 숫자가 이 노래의 id 값이고, 다른 노래의 경우 param 및 encSecKey 값입니다. A와 같은 노래의 이 두 매개변수 값을 노래 B로 전달하면 동일한 페이지 수에 대해 이 매개변수는 보편적입니다. A는 노래 B로 전달됩니다. 다른 노래의 두 매개변수에 대해서는 해당 노래의 첫 번째 페이지에서 설명을 얻을 수 있습니다. 두 번째 페이지, 세 번째 페이지 등에 대해서도 마찬가지입니다.
사실 첫 페이지에서 인기 댓글 15개만 구하면 되므로 노래를 찾아 첫 페이지 요청에 있는 params와 encSecKey의 두 매개변수 값만 복사하면 됩니다. 내려와서 사용할 준비가 되었습니다.
이 두 매개 변수를 해독하는 방법은 실제로 강력한 Zhihu에 대한 답변이 있습니다. 관심 있는 친구들은 들어가서 살펴볼 수 있습니다(https://www.zhihu.com/question/36081767). 요구 사항을 완료하려면 게으른 방법을 사용해야 합니다. xixi.
지금까지 NetEase Cloud Music의 인기 댓글을 캡처하는 방법을 분석했습니다. 클라우드 뮤직 핫곡 목록의 모든 노래에 대한 정보를 얻는 방법을 분석해 보겠습니다.
클라우드 뮤직 핫곡 목록에 있는 모든 노래의 노래 이름과 해당 ID 값을 가져와야 합니다.
위의 분석 단계와 유사하게 먼저 그림과 같이 인기곡 목록의 URL을 입력합니다.
그림과 같이 F12를 눌러 WEB 워크벤치에 들어갑니다.
toplist라는 파일에 있는데 id=3778678인 GET 요청에서 이 목록의 노래 정보가 모두 발견되었습니다.
요청에 해당하는 정보는 그림과 같습니다.
그림과 같이 요청에 의해 반환된 결과를 미리 보겠습니다.
노래 정보가 포함된 코드를 라인에서 찾았습니다. 524 코드(그림 참조):
따라서 요청 코드에서 정보가 포함된 코드만 필터링하면 됩니다.
여기에서는 데이터 필터링에 정규식을 사용합니다.
특성을 관찰하면 두 가지 정규식 필터를 통해 필요한 노래 정보를 추출할 수 있습니다.
첫 번째 정규식의 경우 요청에서 반환된 모든 코드에서 525번째 코드 줄을 추출했습니다.
첫 번째 정규식은 다음과 같습니다.
<ul class="f-hide"> <li> <a href="/song\?id=\d*?" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >.*</a> </li> </ul>
두 번째 정규식은 524행에서 필요한 노래 정보를 추출합니다. 노래 제목과 노래 ID가 필요합니다.
노래 제목 가져오기:
<li><a href="/song\?id=\d*?" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >(.*?)</a></li>
노래 ID 가져오기:
<li><a href="/song\?id=(\d*?)" rel="external nofollow" rel="external nofollow" >.*?</a></li>
이제 전체 과정을 분석했으니 구체적인 내용을 보려면 코드로 가보겠습니다~~
코드는 다음과 같습니다. :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import re import urllib.request import urllib.error import urllib.parse import json def get_all_hotSong(): #获取热歌榜所有歌曲名称和id url='http://music.163.com/discover/toplist?id=3778678' #网易云云音乐热歌榜url html=urllib.request.urlopen(url).read().decode('utf8') #打开url html=str(html) #转换成str pat1=r'<ul class="f-hide"><li><a href="/song\?id=\d*?">.*</a></li></ul>' #进行第一次筛选的正则表达式 result=re.compile(pat1).findall(html) #用正则表达式进行筛选 result=result[0] #获取tuple的第一个元素 pat2=r'<li><a href="/song\?id=\d*?">(.*?)</a></li>' #进行歌名筛选的正则表达式 pat3=r'<li><a href="/song\?id=(\d*?)">.*?</a></li>' #进行歌ID筛选的正则表达式 hot_song_name=re.compile(pat2).findall(result) #获取所有热门歌曲名称 hot_song_id=re.compile(pat3).findall(result) #获取所有热门歌曲对应的Id return hot_song_name,hot_song_id def get_hotComments(hot_song_name,hot_song_id): url='http://music.163.com/weapi/v1/resource/comments/R_SO_4_' + hot_song_id + '?csrf_token=' #歌评url header={ #请求头部 'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } #post请求表单数据 data={'params':'zC7fzWBKxxsm6TZ3PiRjd056g9iGHtbtc8vjTpBXshKIboaPnUyAXKze+KNi9QiEz/IieyRnZfNztp7yvTFyBXOlVQP/JdYNZw2+GRQDg7grOR2ZjroqoOU2z0TNhy+qDHKSV8ZXOnxUF93w3DA51ADDQHB0IngL+v6N8KthdVZeZBe0d3EsUFS8ZJltNRUJ','encSecKey':'4801507e42c326dfc6b50539395a4fe417594f7cf122cf3d061d1447372ba3aa804541a8ae3b3811c081eb0f2b71827850af59af411a10a1795f7a16a5189d163bc9f67b3d1907f5e6fac652f7ef66e5a1f12d6949be851fcf4f39a0c2379580a040dc53b306d5c807bf313cc0e8f39bf7d35de691c497cda1d436b808549acc'} postdata=urllib.parse.urlencode(data).encode('utf8') #进行编码 request=urllib.request.Request(url,headers=header,data=postdata) reponse=urllib.request.urlopen(request).read().decode('utf8') json_dict=json.loads(reponse) #获取json hot_commit=json_dict['hotComments'] #获取json中的热门评论 num=0 fhandle=open('./song_comments','a') #写入文件 fhandle.write(hot_song_name+':'+'\n') for item in hot_commit: num+=1 fhandle.write(str(num)+'.'+item['content']+'\n') fhandle.write('\n==============================================\n\n') fhandle.close() hot_song_name,hot_song_id=get_all_hotSong() #获取热歌榜所有歌曲名称和id num=0 while num < len(hot_song_name): #保存所有热歌榜中的热评 print('正在抓取第%d首歌曲热评...'%(num+1)) get_hotComments(hot_song_name[num],hot_song_id[num]) print('第%d首歌曲热评抓取成功'%(num+1)) num+=1
code 연산 결과는 다음과 같습니다.
웹페이지에 있는 "If I Love You" 노래 리뷰와 우리가 저장한 노래 리뷰를 비교해보세요:
정보가 정확합니다~
요약
위 내용은 Python3은 NetEase Cloud Music의 인기 댓글 분석을 캡처하기 위해 크롤러를 구현합니다(그림).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
