一.简单介绍
urllib库:是python的内置请求库,常用于网页的请求访问。
包括以下模块:
urllib.request 请求模块
urllib.error 异常处理模块
urllib.parse url解析模块
urllib.robotparser robots.txt解析模块
二.实践操作
(1)针对含参数访问
import urllib.request
import urllib.parse
import string
def get_method_params():
url = "http://www.baidu.com/s?"
param = { #多个参数,利用字典的形式完成
"wd":"中文",
"key":"zhang",
"value": "san"
}
# 将字典转换成参数形式的字符串
result = str(param)
# 这个方法可以将URL转化为计算机可以识别的状态,且多个参数之间补充&,补充=
strpa = urllib.parse.urlencode(param)
#拼接参数
finurl = url + strpa
# 将带有中文的url转化为可以识别的状态
encode_url = urllib.parse.quote(finurl, safe=string.printable) # 这里后面的参数是一个固定写法,用来保证原有的URL的状态
#发送网络请求
res = urllib.request.urlopen(encode_url)
data = res.read().decode("utf-8")#获得爬取数据,根据网页编码方式进行解码
print(data)
get_method_params()
可以看到完成网络请求的API是urllib.request.urlopen(),注意这里的param是访问请求的传入参数,是绑定在地址URL上的组成一个完整的URL。
详细参数情况如下:
1.url:传递访问的地址;
2.data:用于传递访问网页的必要参数,可选。如果要添加该参数,并且如果它是字节流编码格式的内容,即bytes类型,则需要通过bytes()方法转化。另外,如果传递了这个参数,则它的请求方式就不再是GET方式,而是POST方式。
import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')
print(data)
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read())
这里使用到了urllib的解析模块中的urlencode()这个API。要用urllib.parse模块里的urlencode()方法来将参数字典转化为字符串。实现转义。这里的参数是发送网络POST请求时携带的参数,与URL并不组成一体。
3.timeout:超时参数设置,可选。
4.其他参数
除了data参数和timeout参数外,还有context参数,它必须是ssl.SSLContext类型,用来指定SSL设置。
此外,cafile和capath这两个参数分别指定CA证书和它的路径,这个在请求HTTPS链接时会有用。
cadefa