首页 > Web开发 > 详细

urllib和urllib3

时间:2019-03-17 14:22:44      阅读:164      评论:0      收藏:0      [点我收藏+]
  • urllib库

urllib 是一个用来处理网络请求的python标准库,它包含4个模块。

urllib.request---请求模块,用于发起网络请求

urllib.parse---解析模块,用于解析URL

urllib.error---异常处理模块,用于处理request引起的异常

urllib.robotparser robots.tx---用于解析robots.txt文件

 

urllib.request模块

 

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

  1. 发起网络请求
  2. 操作cookie
  3. 添加Headers
  4. 使用代理

关于urllib.request.urlopen参数的介绍

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

urlopen是一个简单发送网络请求的方法。它接收一个字符串格式的url,它会向传入的url发送网络请求,然后返回结果。

 

先写一个简单的例子:

from urllib import request
response = request.urlopen(url=‘http://www.httpbin.org/get‘)
print(response.read().decode())

 

urlopen默认会发送get请求,当传入data参数时,则会发起POST请求。data参数是字节类型、者类文件对象或可迭代对象。

from urllib import request
response = request.urlopen(url=‘http://www.httpbin.org/post‘,
                           data=b‘username=q123&password=123‘)
print(response.read().decode())

 

还才可以设置超时,如果请求超过设置时间,则抛出异常。timeout没有指定则用系统默认设置,timeout只对,http,https以及ftp连接起作用。它以秒为单位,比如可以设置timeout=0.1 超时时间为0.1秒。

from urllib import request
response = request.urlopen(url=‘https://www.baidu.com/‘,timeout=0.1)

Request对象

 

利用openurl可以发起最基本的请求,但这几个简单的参数不足以构建一个完整的请求,可以利用更强大的Request对象来构建更加完整的请求。

 

1 . 请求头添加

通过urllib发送的请求会有一个默认的Headers: “User-Agent”:“Python-urllib/3.6”,指明请求是由urllib发送的。所以遇到一些验证User-Agent的网站时,需要我们自定义Headers把自己伪装起来。

from urllib import request
headers ={
    Referer: https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=baidu&wd=python%20urllib%E5%BA%93&oq=python%2520urllib%25E5%25BA%2593&rsv_pq=947af0af001c94d0&rsv_t=66135egC273yN5Uj589q%2FvA844PvH9087sbPe9ZJsjA8JA10Z2b3%2BtWMpwo&rqlang=cn&rsv_enter=0&prefixsug=python%2520urllib%25E5%25BA%2593&rsp=0,
     User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
}
response = request.Request(url=https://www.baidu.com/,headers=headers)
response = request.urlopen(response)
print(response.read().decode())

2. 操作cookie

在开发爬虫过程中,对cookie的处理非常重要,urllib的cookie的处理如下案例

from urllib import request
from http import cookiejar
# 创建一个cookie对象
cookie = cookiejar.CookieJar()

# 创一个cookie处理器
cookies = request.HTTPCookieProcessor(cookie)

# 以它为参数,创建opener对象
opener = request.build_opener(cookies)
# 使用这个opener 来发请求
res =opener.open(https://www.baidu.com/)

print(cookies.cookiejar)

3. 设置代理

运行爬虫的时候,经常会出现被封IP的情况,这时我们就需要使用ip代理来处理,urllib的IP代理的设置如下:

from urllib import request
url =http://httpbin.org/ip

#代理地址
proxy ={http:172.0.0.1:3128}

# 代理处理器
proxies =request.ProxyBasicAuthHandler(proxy)

# 创建opener对象
opener = request.build_opener(proxies)

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

 

 urlib库中的类或或者方法,在发送网络请求后,都会返回一个urllib.response的对象。它包含了请求回来的数据结果。它包含了一些属性和方法,供我们处理返回的结果

read() 获取响应返回的数据,只能用一次 

readline() 读取一行 

info() 获取响应头信息 

geturl() 获取访问的url

getcode() 返回状态码 

 

 

urlib库中的类或或者方法,在发送网络请求后,都会返回一个urllib.response的对象。它包含了请求回来的数据结果。它包含了一些属性和方法,供我们处理返回的结果

urllib和urllib3

原文:https://www.cnblogs.com/jun-1024/p/10546826.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!