python爬虫添加请求头和请求主体

添加头部信息有两种方法

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)