이 기사에서는 Python3 크롤러의 NetEase Cloud Music Crawler 예제를 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
이번 목표는 NetEase Cloud Music에서 특정 노래에 대한 모든 댓글을 크롤링하고 단어 구름을 생성하는 것입니다.
구체적인 단계:
One: JS 암호화 구현
이 Ajax 인터페이스를 찾는 것은 어렵지 않습니다. 문제는 전송되는 데이터가 js를 통해 암호화되기 때문에 js 코드를 확인해야 한다는 것입니다.
디버깅을 중단하면 core_8556f33641851a422ec534e33e6fa5a4.js?8556f33641851a422ec534e33e6fa5a4.js의 window.asrsea 함수로 데이터가 암호화된 것을 확인할 수 있습니다.
더 검색해 보면 다음 함수를 찾을 수 있습니다.
function() { // 生成长度为16的随机字符串 function a(a) { var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = ""; for (d = 0; a > d; d += 1) e = Math.random() * b.length, e = Math.floor(e), c += b.charAt(e); return c } // 实现AES加密 function b(a, b) { var c = CryptoJS.enc.Utf8.parse(b) , d = CryptoJS.enc.Utf8.parse("0102030405060708") , e = CryptoJS.enc.Utf8.parse(a) , f = CryptoJS.AES.encrypt(e, c, { iv: d, mode: CryptoJS.mode.CBC }); return f.toString() } // 实现RSA加密 function c(a, b, c) { var d, e; return setMaxDigits(131), d = new RSAKeyPair(b,"",c), e = encryptedString(d, a) } // 得到加密后的结果 function d(d, e, f, g) { var h = {} , i = a(16); return h.encText = b(d, g), h.encText = b(h.encText, i), h.encSecKey = c(i, e, f), h } function e(a, b, d, e) { var f = {}; return f.encText = c(a + e, b, d), f } }()
그래서 위의 네 가지 함수를 구현하려면 Python을 사용해야 합니다. 임의의 문자열을 생성하는 첫 번째 함수는 어렵지 않습니다. 구현된 코드는 다음과 같습니다.
# 生成随机字符串 def generate_random_string(length): string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" # 初始化随机字符串 random_string = "" # 生成一个长度为length的随机字符串 for i in range(length): random_string += string[int(floor(random() * len(string)))] return random_string
두 번째는 AES 암호화를 구현하는 함수이며, AES 암호화를 사용하려면 Crypto 라이브러리를 사용해야 합니다. 이 라이브러리가 설치되어 있지 않으면 먼저 pycrypto 라이브러리를 설치한 다음 Crypto 라이브러리를 설치해야 합니다. 성공적으로 설치한 후 가져올 때 Crypto가 없고 crypto만 있는 경우 먼저 Python 설치 디렉터리에서 Libsite-packagescrypto 폴더를 엽니다. Cipher 폴더가 있으면 Libsite-packages 디렉터리로 돌아가서 crypto 이름을 바꿉니다. Crypto로 가져오면 성공적으로 가져올 수 있습니다.
AES 암호화의 일반 텍스트 길이는 16의 배수여야 하므로 길이가 16의 배수가 되도록 일반 텍스트에 필요한 패딩을 수행해야 합니다. AES 암호화 모드는 AES.MODE_CBC이고 초기화 벡터는 iv입니다. ='0102030405060708′ . AES 암호화를 구현하는 코드는 다음과 같습니다.# AES加密 def aes_encrypt(msg, key): # 如果不是16的倍数则进行填充 padding = 16 - len(msg) % 16 # 这里使用padding对应的单字符进行填充 msg += padding * chr(padding) # 用来加密或者解密的初始向量(必须是16位) iv = '0102030405060708' # AES加密 cipher = AES.new(key, AES.MODE_CBC, iv) # 加密后得到的是bytes类型的数据 encrypt_bytes = cipher.encrypt(msg) # 使用Base64进行编码,返回byte字符串 encode_string = base64.b64encode(encrypt_bytes) # 对byte字符串按utf-8进行解码 encrypt_text = encode_string.decode('utf-8') # 返回结果 return encrypt_text세 번째는 RSA 암호화를 구현하는 함수입니다.
RSA 암호화에서는 일반 텍스트와 암호문이 모두 숫자입니다. RSA의 암호문은 숫자의 E입니다. 이는 일반 텍스트를 나타냅니다. power mod N을 찾은 결과는 입니다. RSA 암호화 후 얻은 문자열의 길이는 256입니다. 길이가 충분하지 않으면 x 문자로 채웁니다.
RSA 암호화를 구현하는 코드는 다음과 같습니다.# RSA加密 def rsa_encrypt(random_string, key, f): # 随机字符串逆序排列 string = random_string[::-1] # 将随机字符串转换成byte类型数据 text = bytes(string, 'utf-8') # RSA加密 sec_key = int(codecs.encode(text, encoding='hex'), 16) ** int(key, 16) % int(f, 16) # 返回结果 return format(sec_key, 'x').zfill(256)네 번째 함수는 두 개의 암호화 매개변수를 가져오는 함수입니다. 전달된 4개의 매개변수 중 첫 번째 매개변수인
JSON.stringify(i3x)는 다음 내용입니다. offset, Limit 매개변수는 꼭 필요하며, offset 값은 (페이지 수-1)*20, Limit 값은 20
'{"offset":'+str(offset)+',"total":"True","limit":"20","csrf_token":""}'2번째 매개변수, 3번째 매개변수, 4번째 매개변수 값이 모두 필요합니다. 얻은 Zj4n .emj 기반:
encText의 값은 두 가지 AES 암호화를 통해 얻고, encSecKey는 RSA 암호화를 통해 얻습니다. 구현을 위한 구체적인 코드는 다음과 같습니다.
# 获取参数 def get_params(page): # 偏移量 offset = (page - 1) * 20 # offset和limit是必选参数,其他参数是可选的 msg = '{"offset":' + str(offset) + ',"total":"True","limit":"20","csrf_token":""}' key = '0CoJUm6Qyw8W8jud' f = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a87' \ '6aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9' \ 'd05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b' \ '8e289dc6935b3ece0462db0a22b8e7' e = '010001' # 生成长度为16的随机字符串 i = generate_random_string(16) # 第一次AES加密 enc_text = aes_encrypt(msg, key) # 第二次AES加密之后得到params的值 encText = aes_encrypt(enc_text, i) # RSA加密之后得到encSecKey的值 encSecKey = rsa_encrypt(i, e, f) return encText, encSecKey2. 구문 분석 및 댓글 저장
# 爬取评论内容 def get_comments(data): # data=[song_id,song_name,page_num] url = 'https://music.163.com/weapi/v1/resource/comments/R_SO_4_' + str(data[0]) + '?csrf_token=' # 得到两个加密参数 text, key = get_params(data[2]) # 发送post请求 res = requests.post(url, headers=headers, data={"params": text, "encSecKey": key}) if res.status_code == 200: print("正在爬取第{}页的评论".format(data[2])) # 解析 comments = res.json()['comments'] # 存储 with open(data[1] + '.txt', 'a', encoding="utf-8") as f: for i in comments: f.write(i['content'] + "\n") else: print("爬取失败!")3. 워드 클라우드 생성 이 단계를 진행하기 전에 jieba와 wordcloud 두 모듈을 설치해야 합니다. jieba 모듈은 중국어 단어 분할을 위한 모듈이고, wordcloud 모듈은 다음과 같습니다. 생성을 위한 모듈 워드클라우드의 모듈은 스스로 이해하고 공부할 수 있습니다. 이 부분에 대해서는 자세히 설명하지 않겠습니다. 구체적인 코드는 다음과 같습니다.
# 生成词云 def make_cloud(txt_name): with open(txt_name + ".txt", 'r', encoding="utf-8") as f: txt = f.read() # 结巴分词 text = ''.join(jieba.cut(txt)) # 定义一个词云 wc = WordCloud( font_path="font.ttf", width=1200, height=800, max_words=100, max_font_size=200, min_font_size=10 ) # 生成词云 wc.generate(text) # 保存为图片 wc.to_file(txt_name + ".png")전체 코드는 github에 업로드되었습니다(font.ttf 파일 포함): https://github.com/QAQ112233/WangYiYun
위 내용은 Python3 크롤러 예시 NetEase Cloud 음악 크롤러의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.
