urllib.request模块的基本用法
前言
此篇文章中介绍urllib库中request模块的基本用法,包括发送HTTP请求、获得服务器响应、请求头重构等。
正文
urllib库
1、urllib库是Python内置的HTTP请求库,不需要单独安装;
2、urllib库有4个模块,其中request模块 是最基本的HTTP请求模块,作用是向网站发请求,即模拟在浏览器输入地址访问网站;
3、urllib.request 模块主要用到了以下的方法。
3.1 urllib.request.urlopen()方法
request.urlopen()方法 : 向网站发起请求并获取响应对象,返回一个 HTTPResponse 类型的对象。
参数:
url:需要爬取的url地址,必选参数,是一个 字符串 或 Request对象;
timeout:设置等待超时时间,指定时间内未响应抛出超时异常。
响应对象方法:
read() : 返回bytes类型;
geturl():返回实际数据的url地址;
getcode():返回HTTP的响应码。
应用实例:
向百度 http://www.baidu.com/发起请求并获取百度响应内容
from urllib import request
res = request.urlopen(url="http://www.baidu.com/") # 返回响应对象
html = res.read().decode() # decode():转换为字符串类型
url = res.geturl()
code = res.getcode()
print(html)
print(url)
print(code) # 200:响应成功
3.2 urllib.request.Request()方法
urllib.request.Request()方法:主要用于构造一个 url,返回一个 urllib.request.Request 对象。
通过request.urlopen()方法,向网站发送请求,请求头默认为: “User-Agent”: “Python-urllib/3.8” ,有些网站的反爬虫机制不允许python直接访问,所以需要伪装请求头。
“User-Agent”:可以直接百度 “User-Agent大全” 获取。
参数:
url:请求的url地址,必选参数;
headers:添加请求头,类型为字典headers={“User-Agent”:" "}。
使用流程:
from urllib import request
构造请求对象 :req=request.Request(url=url,headers=headers)
获取响应对象 :res=request.urlopen(req)
获取响应内容 :html=res.read().decode()
应用实例:
向测试网站:http://httpbin.org/get 发请求,从响应内容中确认 User-Agent
from urllib import request
url = "http://httpbin.org/get" # 请求的url地址
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko)"} # 请求的User-Agent
req = request.Request(url=url, headers=headers) # 包装请求对象
res = request.urlopen(req) # 发请求
html = res.read().decode() # 获取响应内容
print(html)
{
"args": {},
"headers": {
"Accept-Encoding": "identity",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko)",
"X-Amzn-Trace-Id": "Root=1-63da1945-7c38c759080100c9130dab95"
},
"origin": "223.80.102.182",
"url": "http://httpbin.org/get"
}
从print内容中可以看到,“User-Agent” 已经重构为 Chrome(Win7)浏览器:
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko)"