一、简介
urllib包含了4个模块:
- request:它是最基本的http请求模块,用来模拟发送请求
- error:异常处理模块,如果出现错误可以捕获这些异常
- parse:一个工具模块,提供了许多URL处理方法,如:拆分、解析、合并等
- robotparser:主要用来识别网站的robots.txt文件,然后判断哪些网站可以爬
二、request
1、request.urlopen()
urllib.request.urlopen(url,data=None,[timeout,],cafile=None,capath=None,cadefault=False,context=None)
请求对象,返回一个HTTPResponse类型的对象,包含的方法和属性:
方法:read()、readinto()、getheader(name)、getheaders()、fileno()
属性:msg、version、status、reason、bebuglevel、closed
2、request.data()
- Get
- 利用参数给服务器传递信息
- 参数为dict,然后用parse编码
from urllib import request , parse
base_url = r"http://www.baidu.com/s?"
wd=input("input your word:")
qs = {
"wd":wd
}
qs = parse.urlencode(qs)
full_url = base_url + qs
rsp = request.urlopen(full_url)
html = rsp.read()
print(html.decode())
- Post
- 一般向服务器传递参数使用
- post是把信息自动加密处理
- urllib.parse.urlencode可以将字符串自动转换
from urllib import request,parse
import json
base_url = "https://fanyi.baidu.com/sug"
word = input("input your word:")
data = {
"kw":word
}
data = parse.urlencode(data).encode("utf-8")
rsp = request.urlopen(base_url,data = data)
html = rsp.read().decode("utf-8")
json_data = json.loads(html)
for item in json_data['data']:
for k,v in item.items():
print(v)
3、request.Requset()
urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)
参数:
url:请求的URL,必须传递的参数,其他都是可选参数
data:上传的数据,必须传bytes字节流类型的数据,如果它是字典,可以先用urllib.parse模块里的urlencode()编码
headers:它是一个字典,传递的是请求头数据,可以通过它构造请求头,也可以通过调用请求实例的方法add_header()来添加
origin_req_host:指请求方的host名称或者IP地址
unverifiable:表示这个请求是否是无法验证的,默认为False,如我们请求一张图片如果没有权限获取图片那它的值就是true
method:是一个字符串,用来指示请求使用的方法,如:GET,POST,PUT等
from urllib import request,parse
import json
base_url = "https://fanyi.baidu.com/sug"
word = input("input your word:")
data = {
"kw":word
}
data = parse.urlencode(data).encode("utf-8")
headers = {
"Conten-Length":len(data)
}
req = request.Request(url = base_url , data = data , headers = headers)
rsp = request.urlopen(req)
html = rsp.read().decode("utf-8")
json_data = json.loads(html)
for item in json_data['data']:
for k,v in item.items():
print(v)
三、error
- URLError
- 对应的一般是网络出现问题,包括url问题
- HTTPError
- 对应的HTTP请求的返回码错误,如返回错误码是400以上的,则引发HTTPError
- code:返回HTTP的状态码,如404页面不存在,500服务器错误等
- reason:同父类,返回错误的原因
- headers:返回请求头
urllib的error模块定义了由request模块产生的异常,如果出现问题,request模块便会抛出error模块中定义的异常。
from urllib import request,error
try:
url = "http://www.zhaopin.com/www/www/www"
req = request.Request(url = url)
rsp = request.urlopen(req)
html = rsp.read().decode()
print(html)
except error.URLError as e:
print("URLError:{0}".format(e.reason))
print(e)
except error.HTTPError as e:
print("HTTPError:{0}".format(e.reason))
print(e)
except Exception as e:
print(e)