婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > Python音樂爬蟲完美繞過反爬

Python音樂爬蟲完美繞過反爬

熱門標(biāo)簽:湛江智能外呼系統(tǒng)廠家 外呼并發(fā)線路 百度地圖標(biāo)注沒有了 ai電話機(jī)器人哪里好 地圖標(biāo)注審核表 宿遷星美防封電銷卡 長(zhǎng)沙高頻外呼系統(tǒng)原理是什么 ai電銷機(jī)器人源碼 西藏房產(chǎn)智能外呼系統(tǒng)要多少錢

前言

大家好,我叫善念。

這是我的第二篇博客,也是第一篇技術(shù)博客,希望大家多多支持,讓我更加有動(dòng)力去更新一些python爬蟲類的案例教程。

開始

確立目標(biāo)網(wǎng)址:點(diǎn)擊進(jìn)入

進(jìn)入到跳轉(zhuǎn)頁面:

可以看到出現(xiàn)了咱們需要的一些音樂

分析(x0)

這些音樂的源文件地址是否在咱們的網(wǎng)頁元素中,然后再查看網(wǎng)頁源代碼中是否有咱們需要的內(nèi)容。(注:網(wǎng)頁元素與網(wǎng)頁源代碼不一定是一樣的,網(wǎng)頁元素是經(jīng)過瀏覽器渲染后的源代碼,而源代碼純粹就是服務(wù)器給咱們傳送過來的原始數(shù)據(jù))

網(wǎng)頁元素中只有封面圖片的資源,沒用音頻源文件地址:

網(wǎng)頁源代碼中同樣沒有咱們需要的內(nèi)容:

分析(x1)

其實(shí)沒有才正常(這種大型網(wǎng)站的數(shù)據(jù)不會(huì)讓你這么輕易抓取)....不過是帶大家走一遍流程,對(duì)別的網(wǎng)站也要這樣分析

那么咱們開始播放音樂抓包,看是否能抓到數(shù)據(jù):

果然是經(jīng)過觸發(fā)播放按鈕后,服務(wù)器傳給咱們客戶端的。(ajax)

而咱們抓到的這個(gè)源文件地址

除了這兩段外,其它的應(yīng)該都是固定死的。

分析(x2)

那么我假設(shè)這兩段是從我開始訪問這首歌曲頁面的時(shí)候生成的,比如后面那串?dāng)?shù)字為這首音樂在服務(wù)器數(shù)據(jù)庫中的對(duì)應(yīng)的一個(gè)ID值呢?

假設(shè)是合理的,不過由于咱們前面已經(jīng)查看過源代碼和網(wǎng)頁元素中找不到這些值,我就不在這里浪費(fèi)時(shí)間了。

分析(x3)

這里我和大家講一下,咱們向服務(wù)器發(fā)送一個(gè)網(wǎng)址請(qǐng)求,服務(wù)器給咱們返回的可不止一個(gè)數(shù)據(jù)包,一般都是N個(gè)數(shù)據(jù)包。當(dāng)我們看到源代碼中沒有時(shí)候,也許它正悄悄地通過Ajax傳給我們了?

Ajax在網(wǎng)上有很多的解釋,但是大家未必能理解。從服務(wù)器獲得源代碼數(shù)據(jù),然后通過瀏覽器渲染執(zhí)行JavaScript獲得一些數(shù)據(jù)(音樂)。

這樣說大家應(yīng)該就懂了,那么咱們開始抓當(dāng)前頁面的包:

Ajax異步請(qǐng)求的數(shù)據(jù),都會(huì)在XHR中。所以直接篩選就好了。這個(gè)包我已經(jīng)抓到了,get請(qǐng)求然后看下返回的值。

果然就是這個(gè)包數(shù)據(jù)都是對(duì)應(yīng)的,然后打開看看里面是否有音樂源文件地址:

并沒有,但是有一個(gè)rid出現(xiàn)了兩次。

分析(x4)

那么它是否是咱們音樂的ID(索引)值?

接著看下面的包:

這個(gè)get請(qǐng)求很關(guān)鍵,它的參數(shù)中利用到了咱們的rid這個(gè)值

而他返回值里正好有咱們的音樂源文件地址:

通過分析獲取到音樂

通過咱們的分析,已經(jīng)可以理清思路了。

首先抓取這個(gè)包獲取到rid

然后傳遞rid進(jìn)行這個(gè)包的請(qǐng)求獲取到音樂文件地址

JavaScript繞過之參數(shù)冗余

可以看到這個(gè)rid獲取的地址中有key值是url編碼很輕松就可以解碼:

import requests
keywords = '%E5%BE%80%E4%BA%8B%E9%9A%8F%E9%A3%8E'
print(requests.utils.unquote(keywords))
# 往事隨風(fēng)

而pn=1意思就是第一頁嘛,30就是這一頁總共30條音樂數(shù)據(jù)咯,1代表狀態(tài)碼請(qǐng)求成功,而最后reqId這個(gè)值如何獲取呢?

有能力的自己去逆向JavaScript,而咱們這里直接把這里的參數(shù)都刪除掉,同樣可以訪問到咱們的rid,為什么呢?

當(dāng)你訪問百度的時(shí)候

可以看到多余了很多你看不懂的參數(shù),而這些參數(shù)實(shí)際上可以直接刪除掉!

結(jié)果是一樣的,這個(gè)就叫參數(shù)冗余。

CSRF攻擊與防御

當(dāng)咱們直接訪問這個(gè)鏈接確出現(xiàn)這樣的畫面?

而咱們?nèi)绻颜?qǐng)求頭全部放到咱們的pycharm中利用Python模擬發(fā)送請(qǐng)求卻可以成功(自行測(cè)試)

可以看到請(qǐng)求中有一個(gè)參數(shù)叫csrf,這個(gè)叫做防跨站點(diǎn)攻擊。

這個(gè)就好理解了,當(dāng)我們用瀏覽器直接訪問的話,盡管可以帶cookies,但是咱們是沒法攜帶這個(gè)參數(shù)的。而當(dāng)我們把請(qǐng)求頭完整的復(fù)制在pycharm中Python運(yùn)行的話,就可以攜帶這個(gè)參數(shù),那么就可以訪問。

目的就是保護(hù)此api防止任意情況下都可以隨便訪問。

而這個(gè)csrf參數(shù)不就是咱們cookies中的值么?那么是不是咱們首先需要獲取cookies?因?yàn)閏ookies會(huì)過期阿,為了讓你的程序永久有效,那么最好的辦法就是自動(dòng)獲取cookies

總結(jié)

那么所有的原理都可以搞清楚了

首先訪問首頁獲取cookies,然后繞過JavaScript刪除多余的參數(shù)獲取到rid,最后通過rid進(jìn)行訪問獲取到音樂源地址(這里的參數(shù)也可以刪除),最后保存數(shù)據(jù)!

全程干貨,分析網(wǎng)站反扒手段,Python采集整站任意音樂!

代碼

"""
author: 善念
date: 2021-04-12
"""
import requests
import jsonpath
from urllib.request import urlretrieve
import urllib.parse
 
 
def get_csrf():
    # 保持cookies 維持客戶端與服務(wù)器之間的會(huì)話
 
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        # 'Cookie': 'Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1618229629; _ga=GA1.2.1951895595.1618229638; _gid=GA1.2.369506281.1618229638; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1618230532; kw_token=ZOMA0RIOLV',
        'Host': 'www.kuwo.cn',
        'Pragma': 'no-cache',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
    }
    s.get('http://www.kuwo.cn/', headers=headers)
 
    url = f'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={keyword}pn=1rn=30httpsStatus=1reqId=a3b6cb30-9b8a-11eb-bc04-b33703ed2ebb'
    headers = {
        'Accept': 'application/json, text/plain, */*',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        # 'Cookie': 'Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1618229629; _ga=GA1.2.1951895595.1618229638; _gid=GA1.2.369506281.1618229638; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1618229710; kw_token=UTBATXE1HY',
        'csrf': s.cookies.get_dict()['kw_token'],
        'Host': 'www.kuwo.cn',
        'Pragma': 'no-cache',
        'Referer': f'http://www.kuwo.cn/search/list?key={keyword}',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
 
 
    }
    r = s.get(url, headers=headers)
    print(r.text)
    rid = jsonpath.jsonpath(r.json(), '$..rid')[0]
    print(rid)
    return rid
 
 
def get_music_url(rid):
    url = f'http://www.kuwo.cn/url?format=mp3rid={rid}response=urltype=convert_url3br=128kmp3from=webhttpsStatus=1'
    headers = {
        'Accept': 'application/json, text/plain, */*',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        # 'Cookie': 'Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1618231398; _ga=GA1.2.52993118.1618231399; _gid=GA1.2.889494894.1618231399; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1618231413; _gat=1; kw_token=VBM6N1XEG4P',
        'Host': 'www.kuwo.cn',
        'Pragma': 'no-cache',
        'Referer': f'http://www.kuwo.cn/search/list?key={keyword}',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
    }
    music_url = s.get(url, headers=headers).json().get('url')
    print(music_url)
    return music_url
 
 
def get_music(music_url):
    urlretrieve(music_url, f'{urllib.parse.unquote(keyword)}'+'.mp3')
 
 
def go():
    rid = get_csrf()
    music_url = get_music_url(rid)
    get_music(music_url)
 
 
if __name__ == '__main__':
    s = requests.session()
    keyword = input('請(qǐng)輸入您要下載的音樂名字:')
    keyword = urllib.parse.quote(keyword)
    go()
 
 

到此這篇關(guān)于Python音樂爬蟲完美繞過反爬的文章就介紹到這了,更多相關(guān)Python爬取音樂內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python基于爬蟲實(shí)現(xiàn)全網(wǎng)搜索并下載音樂
  • python實(shí)現(xiàn)可下載音樂的音樂播放器
  • 如何基于Python批量下載音樂
  • python爬取網(wǎng)易云音樂熱歌榜實(shí)例代碼
  • python打開音樂文件的實(shí)例方法
  • python給視頻添加背景音樂并改變音量的具體方法
  • python中加背景音樂如何操作
  • 基于python實(shí)現(xiàn)音樂播放器代碼實(shí)例
  • Python如何爬取qq音樂歌詞到本地
  • python實(shí)現(xiàn)音樂播放和下載小程序功能
  • 如何用Python一次性下載抖音上音樂

標(biāo)簽:盤錦 寧夏 漯河 南平 普洱 林芝 大同 海南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python音樂爬蟲完美繞過反爬》,本文關(guān)鍵詞  Python,音樂,爬蟲,完美,繞過,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python音樂爬蟲完美繞過反爬》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python音樂爬蟲完美繞過反爬的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    激情综合网天天干| 色婷婷精品久久二区二区蜜臀av| 亚洲成人黄色小说| 国产情人综合久久777777| 成人一级视频在线观看| 天堂成人国产精品一区| 婷婷成人激情在线网| 午夜av一区二区三区| 日韩国产精品久久| 日本成人在线不卡视频| 久草中文综合在线| 国产一区二区三区高清播放| 激情综合色综合久久| 日本欧美加勒比视频| 国产麻豆视频一区二区| 成人国产精品免费观看动漫| 色婷婷亚洲精品| 久久精品一区二区| 中文av一区二区| 欧美视频一区二| 日韩精品乱码免费| 日韩欧美视频一区| 最新欧美精品一区二区三区| 国产精品一区二区果冻传媒| 久久精品亚洲一区二区三区浴池| 成人午夜私人影院| 中文字幕精品综合| 91视频在线观看| 肉丝袜脚交视频一区二区| 国产乱色国产精品免费视频| 欧美mv日韩mv国产网站app| 美女脱光内衣内裤视频久久网站| 一区二区三区精品久久久| 亚洲第一激情av| 国产成人精品三级| 97久久精品人人爽人人爽蜜臀| 成人欧美一区二区三区白人| 一本一道久久a久久精品综合蜜臀| 成人动漫在线一区| 粉嫩av一区二区三区粉嫩| 欧美日韩精品福利| 欧美日本精品一区二区三区| 欧美酷刑日本凌虐凌虐| 欧美精品视频www在线观看| 欧美一区二区精品| 精品国产免费人成电影在线观看四季 | 欧美一区二区三区在线看| 欧美一级专区免费大片| 久久一夜天堂av一区二区三区| 日韩一区欧美一区| 中文字幕成人av| 性做久久久久久久免费看| 国产麻豆精品视频| 99久久精品国产导航| 3atv在线一区二区三区| 日韩一区二区三区电影在线观看| 久久久久久9999| 中文字幕一区二区三区视频 | 不卡电影一区二区三区| 欧美精品日韩综合在线| 欧美久久婷婷综合色| 国产精品乱码一区二区三区软件| 日韩在线卡一卡二| 亚洲欧美另类久久久精品| 日韩精品五月天| 91免费国产视频网站| 精品88久久久久88久久久| 一区二区三区精密机械公司| 国产一区二区在线看| 欧美日韩精品久久久| 日韩理论在线观看| 国产麻豆一精品一av一免费| 日韩一区二区免费视频| 欧美日韩一区二区三区免费看| 99久久夜色精品国产网站| 色狠狠av一区二区三区| 精品电影一区二区| 国产精品免费视频观看| 伦理电影国产精品| 欧美影视一区二区三区| 久久久久国产精品麻豆ai换脸| 7777女厕盗摄久久久| 亚洲精品少妇30p| 日韩中文字幕不卡| 色综合久久久久综合99| 久久久久久久精| 午夜欧美视频在线观看 | 91视频一区二区三区| 久久久久久久久久看片| 视频一区国产视频| 国产一区二区不卡老阿姨| 日韩一区二区在线播放| 国产精品你懂的在线欣赏| 亚洲网友自拍偷拍| 欧美亚洲禁片免费| 一区二区三区国产| 在线国产电影不卡| 亚洲一区二区三区美女| 91蝌蚪porny| 中文字幕亚洲区| 91老师国产黑色丝袜在线| 国产日韩精品一区二区浪潮av| 亚洲国产你懂的| 在线观看一区二区视频| 亚洲综合色视频| 在线不卡一区二区| 麻豆久久久久久| 久久久国产午夜精品| 国产福利一区二区三区在线视频| 国产亚洲va综合人人澡精品| 国产精品99久久久久久有的能看| 久久精品日韩一区二区三区| 丁香一区二区三区| 国产视频一区不卡| 色综合久久中文综合久久牛| 亚洲小说欧美激情另类| 欧美一区二区三区四区高清| 夜夜精品视频一区二区| 欧美一区二区三区啪啪| 国产一区二区按摩在线观看| 中文字幕一区av| 欧美精品在线观看一区二区| 国产在线播精品第三| 亚洲欧美国产77777| 91精品国产手机| 国产美女主播视频一区| 亚洲免费三区一区二区| 欧洲亚洲精品在线| 精油按摩中文字幕久久| 亚洲天堂久久久久久久| 91精品国产综合久久福利| 成人免费毛片app| 亚洲成人动漫av| 久久人人爽人人爽| 91国产福利在线| 国产精品综合二区| 亚洲国产综合视频在线观看| 精品乱人伦一区二区三区| 91同城在线观看| 久久av老司机精品网站导航| 综合久久国产九一剧情麻豆| 日韩午夜av电影| 一本到不卡免费一区二区| 韩国精品主播一区二区在线观看| 国产精品久久久久久久久免费相片 | 成人黄色大片在线观看| 亚洲国产婷婷综合在线精品| 中文字幕第一区| 精品国产一区二区三区四区四| 91亚洲精品一区二区乱码| 黄色成人免费在线| 香蕉影视欧美成人| 国产亚洲综合性久久久影院| 欧美日韩1234| 91在线看国产| 国产成人精品三级麻豆| 经典三级一区二区| 日韩精品一级二级 | 欧洲一区二区三区免费视频| 丁香天五香天堂综合| 视频在线观看一区二区三区| 亚洲三级小视频| 国产精品久久综合| 久久欧美中文字幕| 欧美xxx久久| 欧美一级视频精品观看| 91成人免费在线视频| 国产成人自拍高清视频在线免费播放| 亚洲国产精品人人做人人爽| 亚洲免费伊人电影| 亚洲最大成人网4388xx| 成人免费一区二区三区在线观看 | 午夜久久久影院| 亚洲午夜在线视频| 亚洲永久精品国产| 亚洲精品久久久蜜桃| 综合色天天鬼久久鬼色| 1024精品合集| 国产欧美一区二区三区在线老狼| 欧美久久高跟鞋激| 欧美大白屁股肥臀xxxxxx| 日韩欧美一区中文| 26uuu亚洲| 中文在线资源观看网站视频免费不卡 | 北条麻妃国产九九精品视频| 成人一区二区三区视频| 99精品久久99久久久久| 色视频欧美一区二区三区| 欧美三级三级三级| 欧美情侣在线播放| 日韩一区二区三区电影| 久久综合九色综合97婷婷| 久久丝袜美腿综合| 欧美亚洲尤物久久| 欧美日韩国产大片| 欧美性极品少妇| 欧美日韩国产综合一区二区| 欧美精品国产精品| 久久日一线二线三线suv| 国产精品国产三级国产专播品爱网|