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