學習筆記_python和網易雲音樂

環境:

python--version(Python 3.6.5)

pip--version(pip 9.0.3)(需要升級到最新10.0.1:python -m pip install --upgrade pip)

安裝scrapy:pip install scrapy(報錯的話,裝一個VS就什麼都有了)

裝好後,scrapy –version(Scrapy 1.5.0)

然後按照教程來,遇到錯誤ModuleNotFoundError: No module named 'win32api',需要到https://github.com/mhammond/pywin32/releases下載對應版本的pywin32,安裝好之後再在項目根目錄下運行scrapy crawl dmoz就能看到爬蟲執行完成後的Spider closed (finished)了。的,dmoz爲scrapy.Spider的name。也可以在項目根目錄下(與scrapy.cfg同級)下新建main.py中寫入:

from scrapy import cmdline
cmdline.execute("scrapy crawl dmoz".split())

然後在pycharm中直接run這個main.py就可以了。

使用selenium:

https://npm.taobao.org/mirrors/chromedriver下載win32版本的chromedriver.exe,放到python安裝目錄的scripts下。

安裝selenium:pipinstall selenium(我安裝時是3.12.0)。查看是pip show selenium。

學習:

網易雲使用AES加密,因此要安裝加密模塊:Pip install Crypto(Crypto-1.4.1 Naked-0.1.31certifi-2018.4.16 chardet-3.0.4 pyyaml-3.12 requests-2.18.4 shellescape-3.4.1)。

報錯的話裝這個吧:pip3 install pycryptodome然後到python安裝目錄的lib/site-packages的crypto改成Crypto這樣便能使用fromCrypto.Cipher import AES了。

安裝requests第三方庫:pipinstall requests()

(pip install binascii用來字符轉換的)

 

PyCharm使用:

同目錄下import報錯:在PyCharm中右鍵項目根目錄,Make Directory as->Sources Boot


網易雲請求分析:

用chrome打開網易雲,F12打開開發工具,network中(可F5一下)會看到core.js,以及相關請求如粉絲列表https://music.163.com/api/user/getfollows/278688809請求,切換到sources在s3.music.126.net下會看到core.js這是加密相關的主體內容,點開,然後左下角有一個{}可以美化js,然後打斷點觀察請求的加密過程,主要是請求參數params和encSecKey是怎麼得到的。

粉絲請求分析:(getfollows爲關注的人,getfolloweds爲粉絲)

接口url:https://music.163.com/api/user/getfollows/278688809

原始參數:

Cookie: true

Data:"uid=278688809&offset=0&total=true&limit=20"

Method: "GET"

Noescape: undefined

Onerror()

Onload()

Query: "uid=278688809&offset=0&total=true&limit=20"

Type: "json"

中間過程:

Query或者data轉化成對象然後添加csrf_token參數值爲“”,

接口變成https://music.163.com/webapi/user/getfollows/278688809

Method值變爲post,

進入加密函數:四個參數

d爲:

"{"uid":"278688809","offset":"0","total":"true","limit":"20","csrf_token":""}"

e爲(不變):010001

f爲(不變):

00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7

G爲(不變):0CoJUm6Qyw8W8jud

 

產生隨機數i:EtMAM7C53RFGRtGL

經過函數b加密後encText值爲(向量爲0102030405060708):

"Pq/3pP0pT+N/VFi9fioTKyVyrNJzbxIE6+rCf+5bR96h2/GprwVmpPB2Sggfp4aKONdWZzmvMiCAgv1sDn7hW6CkaqHO0T7FklaDWyCgq0Q="

再用隨機數i加密一次後excText值爲(向量爲0102030405060708):

"JfVfU1s4vqGfOASeuj0NUiNUjVK47kQlkFjUey15pwOgJc2jyLHA8qMfrECS6ew0BGRymcAFbPVUI4h2UEyJ1BASbX6VZSS9PEvdT7VstITN/FpD+qitRIBmF9JRq61Vs0JJPfTkqeHjWIVLFFJKgQ=="

RSA加密後encSecKey值爲(使用c(i,e,f)產生的,i如果不是隨機產生的那麼這個值就是固定的):

"0bad02661abf04b656fe95c1334b615bf9b4fb64b1a9bbf49e8cf2105ca7a915feb03bbc44435c5d5fa375d4cf025c82124ea59e08391ab89ed175d025d5149e8a800299aec26bb5aabfb1b66746f333eb12ce23cb63ae52fac6d78cc92db1b98d149bd9b35211dbcf17501dea4b4698446fb156fd5e9bea1d7a0ec58dd3c02a"

最終得到的參數中query被刪除了,data爲:

"params=JfVfU1s4vqGfOASeuj0NUiNUjVK47kQlkFjUey15pwOgJc2jyLHA8qMfrECS6ew0BGRymcAFbPVUI4h2UEyJ1BASbX6VZSS9PEvdT7VstITN%2FFpD%2BqitRIBmF9JRq61Vs0JJPfTkqeHjWIVLFFJKgQ%3D%3D&encSecKey=0bad02661abf04b656fe95c1334b615bf9b4fb64b1a9bbf49e8cf2105ca7a915feb03bbc44435c5d5fa375d4cf025c82124ea59e08391ab89ed175d025d5149e8a800299aec26bb5aabfb1b66746f333eb12ce23cb63ae52fac6d78cc92db1b98d149bd9b35211dbcf17501dea4b4698446fb156fd5e9bea1d7a0ec58dd3c02a"

使用PyMongo:

安裝:pip install pymongo(3.6.1)

使用:

import pymongo

from pymongo import MongoClient

from bson.objectid import ObjectId

 

client = pymongo.MongoClient("127.0.0.1", 27017)
db = client[
"music"]
fansTable = db[
"fans"]

fansTable.count({'userId': item['userId']})或者insert即可




未完待續……


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章