~urllib库的使用

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

 

转载于:https://www.cnblogs.com/Cyzhouke/p/11498659.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值