Intro
一直想自己动手用框架搭起来一个搜索引擎,但是也一直不知道从哪里开始下手比较好。
最近一直在网易云音乐上听歌,决定从网易云上把评论全部爬下来,用评论做一个垂直搜索
Path
说干就开始吧 首先第一步得先把网易云上的评论爬下来吧,没有评论资源怎么开始干活啊!
就拿我最喜欢的歌手 Eason 陈奕迅 做例子吧
首先打开网页版的网易云音乐 搜索 十年 这首歌~
十年-Eason
接下来打开我们浏览器的开发者工具
仔细找找以后果然发现了这个API
https://music.163.com/weapi/v1/resource/comments/R_SO_4_66842?csrf_token=
还是一个挺奇怪的API哈,我们应该能看出来 R_SO_4_66842 是这首歌的ID,翻看了一下其他歌曲,果然 都是通过这个API去获取评论的
后面的csrf_token应该是防止跨域访问攻击的,不在我们讨论的范围
仔细看了一下这个API,需要哪些参数
需要两个什么鬼的参数
一个是params 另一个是encSecKey
显然网易云为了防止爬虫已经做了很多加密工作了,这就很难受
正当我走投无路的时候,发现了这篇文章!
https://www.zhihu.com/question/36081767
真大神啊。。。人家已经把参数和什么全部解析出来了
于是简单的“改装阅读”一下代码
EncryptUtil.py:
# -*- coding:utf-8 -*-
import os
import base64
import time
from Crypto.Cipher import AES
def createSecretKey(size):
return (''.join(map(lambda xx: (hex(ord(xx))[2:]), os.urandom(size))))[0:size]
def aesEncrypt(text, secKey):
pad = 16 - len(text) % 16
text = text + pad * chr(pad)
encryptor = AES.new(secKey, 2, '0102030405060708')
ciphertext = encryptor.encrypt(text)
ciphertext = base64.b64encode(ciphertext)
return ciphertext
def rsaEncrypt(text, pubKey, modulus):
text = text[::-1]
rs = int(text.encode('hex'), 16)**int(pubKey, 16)%int(modulus, 16)
return format(rs, 'x').zfill(256)