怎么用Python爬蟲搞定發(fā)送中文HTTP請(qǐng)求頭

本篇內(nèi)容主要講解“怎么用Python爬蟲搞定發(fā)送中文HTTP請(qǐng)求頭”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么用Python爬蟲搞定發(fā)送中文HTTP請(qǐng)求頭”吧!

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的準(zhǔn)格爾網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

怎么用Python爬蟲搞定發(fā)送中文HTTP請(qǐng)求頭

有時(shí)需要將HTTP請(qǐng)求頭的值設(shè)為中文,但如果直接設(shè)成中文,會(huì)拋出異常,例如,下面的代碼為Chinese請(qǐng)求頭設(shè)置了中文。

from urllib import request url = 'http://httpbin.org/post' headers = {     'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',     'Host':'httpbin.org',     'Chinese':'李寧', } req = request.Request(url = url,headers=headers,method="POST") request.urlopen(req)

執(zhí)行這段代碼,會(huì)拋出如下的異常。

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)

這個(gè)異常表明HTTP請(qǐng)求頭只能是英文字符和符號(hào),不能是雙字節(jié)的文字,如中文。為了解決這個(gè)問題,在設(shè)置HTTP請(qǐng)求頭時(shí)需要將中文編碼,然后發(fā)送到服務(wù)端后,在服務(wù)端用同樣的規(guī)則解碼??梢圆捎枚喾N編碼方式,例如url編碼,base64編碼,url編碼就是在瀏覽器地址欄中如果輸入中文,會(huì)將其轉(zhuǎn)換為%xx的形式。如輸入“中國(guó)”,會(huì)變成E4%B8%AD%E5%9B%BD。

對(duì)字符串url編碼,需要使用urllib.parse模塊的urlencode函數(shù),解碼要使用unquote函數(shù),代碼如下:

from urllib.parse import unquote,urlencode # 對(duì)中文進(jìn)行編碼 value = urlencode({'name':'李寧'}) print(value) # 對(duì)中文進(jìn)行解碼 print(unquote(value))

執(zhí)行這段代碼,會(huì)輸出如下結(jié)果:

name=%E6%9D%8E%E5%AE%81 name=李寧

使用urlencode函數(shù)進(jìn)行編碼時(shí),需要指定字典類型,不能直接對(duì)字符串進(jìn)行編碼。因?yàn)閡rlencode函數(shù)只能對(duì)url參數(shù)進(jìn)行編碼。

base64編碼需要使用base64模塊中的b64encode函數(shù),解碼使用b64decode函數(shù),代碼如下:

import base64 # 對(duì)中文進(jìn)行編碼 base64Value = base64.b64encode(bytes('Python從菜鳥到高手',encoding='utf-8')) print(str(base64Value,'utf-8')) # 對(duì)中文進(jìn)行解碼,并按utf-8編碼格式將解碼后的結(jié)果轉(zhuǎn)換為字符串 print(str(base64.b64decode(base64Value),'utf-8'))

b64encode函數(shù)編碼后返回的是bytes類型,需要使用str函數(shù)將其轉(zhuǎn)換為字符串類型。b64decode函數(shù)解碼時(shí)需要指定bytes類型的值,b64decode函數(shù)的返回值也是bytes類型,所以也需要str函數(shù)將該函數(shù)的返回值轉(zhuǎn)換為字符串。

下面的例子演示了設(shè)置中文HTTP請(qǐng)求頭,并對(duì)其解碼的完整過程。

from urllib import request from urllib.parse import unquote,urlencode import base64 url = 'http://httpbin.org/post' headers = {     'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',     'Host':'httpbin.org',     'Chinese1':urlencode({'name':'李寧'}),  # 設(shè)置中文HTTP請(qǐng)求頭,用url編碼格式     # 設(shè)置中文HTTP請(qǐng)求頭,用base64編碼格式     'MyChinese':base64.b64encode(bytes('這是中文HTTP請(qǐng)求頭',encoding='utf-8')),     'who':'Python Scrapy' } dict = {     'name':'Bill',     'age':30 } data = bytes(urlencode(dict),encoding='utf-8') req = request.Request(url = url,data=data,headers=headers,method="POST") # 通過add_header方法添加中文HTTP請(qǐng)求頭,url編碼格式 req.add_header('Chinese2',urlencode({"國(guó)籍":"中國(guó)"})) response=request.urlopen(req) # 獲取服務(wù)端的響應(yīng)信息 value = response.read().decode('utf-8') print(value) import json # 將返回值轉(zhuǎn)換為json對(duì)象 responseObj = json.loads(value) # 解碼url編碼格式的HTTP請(qǐng)求頭 print(unquote(responseObj['headers']['Chinese1'])) # 解碼url編碼格式的HTTP請(qǐng)求頭 print(unquote(responseObj['headers']['Chinese2'])) # 解碼base64編碼格式的HTTP請(qǐng)求頭 print(str(base64.b64decode(responseObj['headers']['Mychinese']),'utf-8'))

到此,相信大家對(duì)“怎么用Python爬蟲搞定發(fā)送中文HTTP請(qǐng)求頭”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

新聞名稱:怎么用Python爬蟲搞定發(fā)送中文HTTP請(qǐng)求頭
網(wǎng)址分享:http://bm7419.com/article46/gegphg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、微信小程序、定制網(wǎng)站、做網(wǎng)站、響應(yīng)式網(wǎng)站搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司