python urllib库基本使用

urllib是python提供的一个爬虫的原生框架,python发起网络请求都是通过该框架

 

1 request.urlopen(url)  打开远程连接     返回值是一个响应对象,响应对象包含响应头和响应体

【注意】urlopen()这个函数只能用于发送简单的请求,无法添加请求头,添加请求头需要使用request.Request()方法

import urllib.request

url = 'http://www.baidu.com/'
res=urllib.request.urlopen(url=url)
print(res)  #<http.client.HTTPResponse object at 0x0000000002D1FC88>

 

res.read().decode('utf-8')   # read() 从响应对象中读取出响应体,decode('utf-8')对响应体进行解码
res.readlines()              # 按行读取
res.url                      # 得到请求的url
res.headers                  # 响应头部  字符串
res.getheaders()             # 列表,列表里面是元组
res.getcode()                # 获取响应状态码


2 request.urlretrieve(url,filename)    把url的内容下载下来,存储到filename的目录下

urllib.request.urlretrieve(url=url,filename='./baidu.html')


3 parse.urlencode()  将参数处理成url参数   由于urllib库不能识别汉字,所以汉字需要转成ASCII编码形式
1)把待处理的参数写成字典的形式

dic = {'参数':'值'}

2)用urlencode()方法将字典处理成url参数(xx=xxx&pp=ppp...)

import urllib.parse    #导入parse,这个库主要用于处理url的格式问题
data = urllib.parse.urlencode(dic)

 

4 request.Request()方法携带用户代理,目的是伪装浏览器
有些网站为了防止某些恶意的爬虫攻击网站,会设置用户代理,后台通过用户代理决定应该如何响应给前端内容,如果做反爬,可以在用户代理上进行限制

一个请求包含三部分内容:url、请求头、请求体(get请求请求体在url中)

  • get请求

1)构建Request对象,并让其携带用户代理

req = urllib.request.Request(url=url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0'})
print(req)     #<urllib.request.Request object at 0x00000000022BED30>

2)用请求对象来发送请求

res = urllib.request.urlopen(req)
print(res)      #<http.client.HTTPResponse object at 0x0000000002D576D8>

另外:用户代理也可以用以下方式添加

req = urllib.request.Request(url=url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0' )
  • post请求

1)构造请求参数

#url
url = 'https://fanyi.baidu.com/sug'
#请求头
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0' }
#请求体
data = {'参数':'值'} 

2)把请求体处理成url参数的形式

data = urllib.parse.urlencode(data).encode('utf-8')
print(data)           #b'参数=值'

3)用前面创建好的请求头,请求体和url,去创建一个请求对象

req = urllib.request.Request(url=url,headers=headers,data=data)

4)发起请求

res = urllib.request.urlopen(req) 

 

5 error 接收由urllib.request产生的异常

import urllib.error

url = 'http://www.baidu.com/?参数=值'
req = urllib.request.Request(url=url)

try:
res = urllib.request.urlopen(req)
print('0')
except urllib.error.URLError as e:
#网址本身有异常,比如这个域名不存在
print(e)
print('1')
except urllib.error.HTTPError as e:
#在发起http请求的时候或是响应的时候发生了异常
print(e)
print('2')
except Exception as e :
print(e)
print('3')

 

 6 request.ProxyHandler({'协议名':'host:port',...}) 配置代理

proxy = urllib.request.ProxyHandler({'http':'123.188.91.126:80'}) 
#创建一个opener对象,用于携带代理发起请求 
opener = urllib.request.build_opener(proxy) 
res = opener.open(req)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值