~urllib库的使用

微笑、不失礼 提交于 2019-12-19 03:22:33

urllib库:用来处理网络请求的python标准库

主要包含4个模块:

  • urllib.requests:请求模块,用来发起网络请求
  • urllib.parse:解析模块,用来解析url
  • urllib.error:异常处理模块,用来处理requests引起的异常情况
  • urllib.robotparse:用来解析robots.txt文件

1.requests模块

主要负责构造和发起网络请求,并在其中添加headers、proxy等。利用requests模块可以模拟浏览器的请求发起过程。

1.1 请求方法urlopen

"urlopen是一个简单的发送网络请求的方法,timeout设置超时,如果请求超过设置时间,则抛出异常"
response = request.urlopen(url='http://www.baidu.com/get', timeout=0.1)

"urlopen默认是发送get请求,当传入data参数时,则会发送post请求"
response = request.urlopen(url='http://www.baidu.com/post',data=b'username=admin&password=123456')

1.2 添加请求头

"通过urllib发送的请求会有一个默认的Headers: “User-Agent”:“Python-urllib/3.6”,指明请求是由urllib发送的。"
"所以遇到一些验证User-Agent的网站时,需要我们自定义Headers把自己伪装起来。"
headers = {
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                   'Chrome/71.0.3578.98 Safari/537.36'
}
req = request.Request('http://www.baidu.com', headers=headers)

1.3 操作cookie

from urllib import request
from http import cookiejar

# 创建一个cookie对象
cookie = cookiejar.CookieJar()
# 创建一个cookie处理器
cookies = request.HTTPCookieProcessor(cookie)
# 以cookies为参数,创建openner对象
opener = request.build_opener(cookies)
# 使用opener来发送请求
res = opener.open('http://www.baidu.com')
print(cookies.cookiejar)

1.4 设置代理

from urllib import request

url = 'http://www.baidu.com'
# 代理地址
proxy = {'http': '192.168.0.105:8080'}
# 代理服务器
proxies = request.ProxyHandler(proxy)
# 创建opnner对象
opener = request.build_opener(proxies)

res = opener.open(url)
print(res.read().decode())

1.5 response对象

"urllib库中的类或方法,用来处理返回的结果"
# read():获取响应返回的数据,只能用一次
print(response.read())

# readline():读取一行
wile True
    data = response.readline()
    if data:
        print(data)

# info():获取响应头信息
print(response.info())

# 获取访问的url
print(response.geturl())

# 返回状态码
print(response.getcode())

2.parse模块

 提供需要对url处理的方法,用于解析url

# parse.quote()------编码特殊字符
"url中只能包含ascii字符,在实际操作过程中,get请求通过url传递的参数中会有大量的特殊字符,例如汉字,那么就需要进行url编码。"
from urllib import parse

url = 'https://www.baidu.com/s?wd={}'
safe_url = url.format(parse.quote('杭州'))
print(safe_url)
# 利用parse.unquote进行返编码
safe1_url = url.format(parse.unquote(safe_url))
print(safe1_url)

# parse.urlencode()------拼接url参数
params = {'wd': '测试', 'code': 1, 'height': '188'}
res = parse.urlencode(params)
print(res)
# 使用parse.parse_qs()方法将它转回字典
print(parse.parse_qs(res))

3.error模块

主要负责处理异常,如果请求出现错误,可以利用error模块进行处理主要包含URLError和HTTPError

URLError:是error异常模块的基类,由request模块产生的异常都可以用这个类来处理。

HTTPError:是URLError的子类,主要包含三个属性:

  • code:请求的状态码
  • reason:错误的原因
  • headers:响应的报头

4.robotparse模块

主要负责处理爬虫协议文件:robots.txt的解析。http://www.taobao.com/robots.txt

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!