添加頭部信息有兩種方法
1.通過添加urllib.request.Request中的headers參數(shù)
1 #先把要用到的信息放到一個(gè)字典中 2 headers = {} 3 headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) .......' 4 headers['......'] = '........' 5 6 #提交的主體信息,可以使用windows的瀏覽器找出來(lái),以字典的形式寫出來(lái) 7 data = {} 8 data['eng'] = '0' #1:英->漢 0:漢->英 9 data['validate'] = ''10 data['ignore_trans'] = '0'11 12 #將攜帶的數(shù)據(jù)轉(zhuǎn)換成請(qǐng)求方法的對(duì)應(yīng)類型13 reqdata = urllib.parse.urlencode(data).encode('utf-8')14 15 #生成一個(gè)請(qǐng)求報(bào)文,這里的url和data需要提前給定 16 req = urllib.request.Request(url,reqdata,headers) 17 18 #使用這個(gè)報(bào)文去請(qǐng)求網(wǎng)頁(yè),這時(shí)請(qǐng)求的報(bào)文中就帶有瀏覽器標(biāo)識(shí)了19 html = urllib.request.urlopen(req).read()
2.通過urllib.request.Request的add_header方法添加
1 #生成請(qǐng)求報(bào)文,這里先不加入header參數(shù)2 req = urllib.request.Request(url,reqdata)3 4 #通過返回的請(qǐng)求對(duì)象添加header頭,這里是個(gè)元祖,不是字典5 req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64)')6 7 #這時(shí)再去請(qǐng)求就是帶有瀏覽器標(biāo)識(shí)的報(bào)文了8 html = urllib.request.urlopen(req).read()
360翻譯示例代碼:
1 import urllib.request 2 import chardet 3 import urllib.parse 4 import json 5 6 #請(qǐng)求url路徑,這個(gè)是360翻譯 7 url = 'https://fanyi.so.com/index/search?eng=0&validate=&ignore_trans=0&query=%E5%8E%86%E5%8F%B2%0A' 8 #這里只寫了個(gè)瀏覽器標(biāo)識(shí) 9 headers = {}10 headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'11 #提交的請(qǐng)求主體信息12 data = {}13 data['eng'] = '0' #1:英->漢 0:漢->英14 data['validate'] = ''15 data['ignore_trans'] = '0'16 while True:17 str = input("請(qǐng)輸出要翻譯的中文(輸入q退出):") #要查詢的內(nèi)容18 if str == 'q':19 break20 else:21 data['query'] = str22 23 24 #將攜帶的數(shù)據(jù)轉(zhuǎn)換成請(qǐng)求方法的對(duì)應(yīng)類型25 reqdata = urllib.parse.urlencode(data).encode('utf-8')26 #把url、data、header封裝成一個(gè)請(qǐng)求27 req = urllib.request.Request(url,reqdata,headers)28 #提交請(qǐng)求29 response = urllib.request.urlopen(req)30 #獲取返回頁(yè)面內(nèi)容31 html = response.read()32 #將返回的頁(yè)面進(jìn)行解碼,可以使用chardet.detect(html)查看頁(yè)面編碼33 # print(type(html)) 可以這樣打印,判斷出頁(yè)面的類型是什么,好進(jìn)行下一步的轉(zhuǎn)碼34 # print(isinstance(html,bytes))35 html = html.decode('ascii')36 #html為json格式,轉(zhuǎn)換成字典類型37 html = json.loads(html)38 #提取出翻譯的字段39 translation = html['data']['fanyi']40 41 print(translation)
聯(lián)系客服