使用urllib进行get或post请求

1、学习get和post请求,尝试使用requests或者是urllib用get方法baidu发出一个请求,并将其返回结果输出
import urllib.request
url = ‘https://www.baidu.com’
response = urllib.request.urlopen(url)
print(response.read())
输出结果是:
使用urllib进行get或post请求_第1张图片

2、断开网络再发出请求,结果是什么?
结果是:urllib.error.URLError:

3、了解什么是请求头?如何添加请求头?
1)请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。
以下是访问baidu的请求头信息:
使用urllib进行get或post请求_第2张图片
2)添加请求头可以采用两种方式:
第一种:
将请求头存到字典里面,再将该请求头作为参数传到request模块的Request类中。如下:
req_headers = {
}
res = urllib.request.Request(url=req_url, headers=req_headers)
添加完请求头后的运行结果如下:
使用urllib进行get或post请求_第3张图片
第二种:
调用Request类的add_header方法进行请求头添加
value = ‘123’
res = urllib.request.Request(url=req_url)
resp = res.add_header(‘key’,value)

4、总结:
1)headers中最好不要加这一行:‘Accept-Encoding’:‘gzip, deflate, br’
否则解码时会报错:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x8b in position 1: invalid start byte
原因:这条信息代表本地可以接收压缩格式的数据,因为你的程序没有解压这个文件,所以删掉这行就不会出现问题了
2)代码示例:

import urllib.request

req_url = r'https://www.baidu.com'
req_headers = {
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    # 'Accept-Encoding':'gzip, deflate, br',
    # 加上上一行会报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
    # 原因:这条信息代表本地可以接收压缩格式的数据,因为你的程序没有解压这个文件,所以删掉这行就不会出现问题了

    'Accept-Language':'en-US,en;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7,zh;q=0.6',
    'Connection':'keep-alive',
    'Host':'www.baidu.com',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
}
res = urllib.request.Request(url=req_url, headers=req_headers)
response = urllib.request.urlopen(res)
html = response.read()
print(html.decode())

你可能感兴趣的:(爬虫)