添加头部信息有两种方法
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)