python3 爬虫2--发送请求1
1urlopen
属于url.request类
我们用urlopen("网址")来发送请求
最基础的发送请求如下
from urllib.request import urlopen
reponse=urlopen('https://www.baidu.com')
print(reponse.read.decode('utf-8'))
这里面的reponse是一个HTTPResponse类型的对象
包含的方法有read(),readto(),getheader(name),getheaders(),fileno()
read上面已经用过我们还可以print(reponse.getheaders());print(reponse.getheader('name'))
包含的属性有msg,version,status,reason,debuglevel,close等
同时urlopen还有其他参数可以选例如:
data参数,要求字节流编码格式内容
data=bytes(urllib.parse.urlencode({'word':'hello'},encode='utf-8')),
timeout参数,表示超过指定时间,就会抛出异常
try:
response=urllib.request.urlopen('http://httpbin.org/get',timeout=0.1)
except urllib.error.URLErroe as e:
if isinstance(e.reason,socket.timeout):
print('Time Out')
其它还有context参数,cafile,capath参数
2Rquest
urlopen只能发起最简单的请求,如果我们需要在请求中加入一些Headers等信息,就需要用到Request
Resquest的构造方法如下
class urllib.request.Request(url,data=None,headers={},origin_req_host=None,\
unverifiable=False,method=None)
url:必填参数
data参数:同上,如果要传,必须要传bytes类型,如果是字典,用parse模块里面的urlencode编码
headers参数:是一个字典,这是请求中的headers了,可以自己直接构造,还可以调用Request示例的add_headers()方法
origin_req_host参数是指的请求方host名称或者IP地址。
underifiable参数值得是这个请求是无法验证的,默认是false
methon参数用来支持请求使用的方法,比如GET,POST,PUT等等
下面是例子
url='http://httpbin.org/post'
headers={
'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
Host': 'httpbin.org'
}
dict={
‘name’:'lihua'}
data=bytes(parse.urlendoe(dict),encoding='utf-8')
req=request.Request(url=url,data=data,headers=headers,method='POST')
reponse=request.urlopen(erq)
print(repose,read().decode('utf-8'))
想要使用add_headerd的话则这么写
req=request.Request(url=url,data=data,method='POST')
req.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)
')
下面的就是更高级的handler的用法,以后再续