序言
有時(shí)候在通過Python爬取網(wǎng)頁數(shù)據(jù)的時(shí)候瓢娜,比如抖音挂洛、快手等短視頻數(shù)據(jù);網(wǎng)頁會(huì)返回亂碼;這種亂碼數(shù)據(jù)眠砾,不管是gb2312虏劲、utf-8、gbk、亦或者使用gbk的超集gb18030等編碼都毫無用處柒巫±ぃ看下圖。
image.png
原因出在一個(gè)參數(shù)上 'accept-encoding': 'gzip, deflate, br'
gzip是一種數(shù)據(jù)格式堡掏;默認(rèn)且目前僅使用deflate算法壓縮data部分应结,這種方法常用于壓縮傳輸。
image.png
普通瀏覽器在訪問網(wǎng)頁時(shí)泉唁,之所以要添加 'accept-encoding': 'gzip, deflate, br' 鹅龄;是因?yàn)椋瑸g覽器對于從服務(wù)器中返回的對應(yīng)的gzip壓縮的網(wǎng)頁亭畜,會(huì)自動(dòng)解壓縮扮休,所以,在requests的時(shí)候贱案,添加對應(yīng)的請求頭肛炮,來表明自己接收壓縮后的數(shù)據(jù)止吐。
而在上面的代碼中宝踪,如果也添加此頭的信息,結(jié)果就是碍扔,返回的是壓縮后的數(shù)據(jù)瘩燥,沒有解碼,直接將壓縮后的數(shù)據(jù)當(dāng)做普通的html文本來處理不同,所以顯示出來的內(nèi)容厉膀,就是亂碼了。(看到這里是不是有種恍然大悟??)
如果還不理解再直白點(diǎn):就是服務(wù)器數(shù)據(jù)返回給客戶端時(shí)候已經(jīng)被gzip壓縮了二拐,而你的程序里面沒有自動(dòng)解壓而已服鹅。