最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3?requests中文亂碼之壓縮格式問題解析

 更新時間:2022年08月19日 15:40:57   作者:Jason_WangYing  
這篇文章主要介紹了python3?requests中文亂碼問題之壓縮格式問題,我們在爬蟲時,經(jīng)常會遇見中文亂碼問題,之前都是編碼格式的問題,很少遇見由于壓縮格式造成的編碼混亂問題,特記錄下,需要的朋友可以參考下

我們在爬蟲時,經(jīng)常會遇見中文亂碼問題,之前都是編碼格式的問題,很少遇見由于壓縮格式造成的編碼混亂問題,特記錄下。先看下混亂的編碼樣式。

b'a\xd4l\x00 G6\xb5\xaa\xdf\xeaAy\x0f\xa0\xcaoZ\x92I&\x88\x14$p\xd8N\xb8\xaau\x02\xab\xdf\xeb\xac\x89r\x112q\x91\x99\xd8t\x1b\xa1"\x0b]\xb7\xf2\xee\xde[\xe8\x8a.\xd1\xa5\xe9(ZqE\xa1q\x08\x9dV\x0f\xba\x90\x11\x16K\x10^~\xc5|7\x02\x17\xd6\xef\t\x17\xea5\xe6}\xb6\x95\xf1\x91\xf6H\xa9o+s\xd3\xadv\xa9\xff\xb3\xad\xec\

 我們先看下header

header = {
    "Content-Type":"application/json",
    "Accept": "application/json",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Agw-Js-Conv": 'str',
    "Connection": "keep-alive",
    "Cookie":"***",
    "Host": "life.douyin.com",
    "Referer": "https://life.douyin.com/p/login",
    "sec-ch-ua": '"Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"',
    "sec-ch-ua-platform": "Android",
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-origin",
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Mobile Safari/537.36",
    "x-secsdk-csrf-token": "*",
}

我們注意到Content-Type是application/json,我們的數(shù)據(jù)是jason格式,這時要考慮中文轉(zhuǎn)換問題,用utf-8來把中文從unicode轉(zhuǎn)過來。

我們轉(zhuǎn)了后發(fā)現(xiàn)解析出來的數(shù)據(jù)還是亂碼,這是什么情況呢?我們先看下請求頭和響應(yīng)頭關(guān)于字段的解釋

請求頭字段說明響應(yīng)頭字段
Accept告知服務(wù)器發(fā)送何種媒體類型Content-Type
Accept-Language告知服務(wù)器發(fā)送何種語言Content-Language
Accept-Charset告知服務(wù)器發(fā)送何種字符集Content-Type
Accept-Encoding告知服務(wù)器采用何種壓縮方式Content-Encoding

我們再看"Accept-Encoding",這個意思就是返回的數(shù)據(jù)使用的是什么壓縮格式,平常我們經(jīng)常使用"gzip, deflate",這是我們發(fā)現(xiàn)后面還跟了個br,br是什么格式呢?

br 指的是 Brotli,是一種全新的數(shù)據(jù)格式,無損壓縮,壓縮比極高(比gzip高的)

這需要單獨(dú)導(dǎo)入brotil庫

安裝

pip install Brotli

安裝后我們使用brotli來解析數(shù)據(jù)即可,

data = brotli.decompress(res.content)

還有一種最簡單的方法,我們修改請求頭,高速服務(wù)器,我不支持br格式,這樣服務(wù)器就不會用br來壓縮數(shù)據(jù)了

"Accept-Encoding": "gzip, deflate",

補(bǔ)充下:BrotliDecompress failed錯誤問題

剛開始我用request庫時發(fā)現(xiàn),對返回的response數(shù)據(jù)必須要引入brotli,這樣才能解壓縮數(shù)據(jù),如果不引入無法解析數(shù)據(jù),還是會反回亂碼數(shù)據(jù)

import brotli
res = requests.get(url,headers = header,verify=False)
print(res.content)
print(res.text)
 
if res.headers.get('Content-Encoding') == 'br':
    data = brotli.decompress(res.content)
    print(data.decode('utf-8'))
else:
    print(res.text)

但是在我使用httpx后,發(fā)先再使用brotli.decompress()方法,會造成報(bào)錯

Traceback (most recent call last):
  File "/****", line 61, in <module>
    data = brotli.decompress(res.content)
brotli.error: BrotliDecompress failed

這時無需引入brotli庫,httpx會自動引入,自動調(diào)用

import json
finish_data = []
with httpx.Client(http2=True, verify=False) as client:
    cookies = httpx.Cookies()
    res = client.get(url,headers = header)
    if res.headers.get('Content-Encoding') == 'br':
       data = res.content.decode('utf-8')
       print(data)
       
       else:
          print(res.text)

到此這篇關(guān)于python3 requests中文亂碼問題之壓縮格式問題的文章就介紹到這了,更多相關(guān)python3 requests中文亂碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

洛南县| 远安县| 象州县| 双城市| 南华县| 南靖县| 义乌市| 丹阳市| 昆山市| 项城市| 榕江县| 沾益县| 淳化县| 中山市| 通江县| 龙口市| 双峰县| 万全县| 建湖县| 蒲江县| 利辛县| 铜山县| 平邑县| 普定县| 舒兰市| 徐水县| 秦皇岛市| 紫金县| 嘉义市| 介休市| 中宁县| 台湾省| 汉中市| 安顺市| 威海市| 茂名市| 柳林县| 安仁县| 高平市| 合山市| 礼泉县|