首页 > 编程 > Python > 正文

python爬虫之urllib3的使用示例

2020-02-15 22:16:09
字体:
来源:转载
供稿:网友

Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库。许多Python的原生系统已经开始使用urllib3。Urllib3提供了很多python标准库urllib里所没有的重要特性:

    线程安全 连接池 客户端SSL/TLS验证 文件分部编码上传 协助处理重复请求和HTTP重定位 支持压缩编码 支持HTTP和SOCKS代理

一、get请求

urllib3主要使用连接池进行网络请求的访问,所以访问之前我们需要创建一个连接池对象,如下所示:

import urllib3url = "http://httpbin.org"http = urllib3.PoolManager();r = http.request('GET',url+"/get")print(r.data.decode())print(r.status)带参数的getr = http.request('get','http://www.baidu.com/s',fields={'wd':'周杰伦'})print(r.data.decode())

经查看源码:

def request(self, method, url, fields=None, headers=None, **urlopen_kw):
第一个参数method 必选,指定是什么请求,'get'、'GET'、'POST'、'post'、'PUT'、'DELETE'等,不区分大小写。 第二个参数url,必选 第三个参数fields,请求的参数,可选 第四个参数headers 可选

request请求的返回值是<urllib3.response.HTTPResponse object at 0x000001B3879440B8>

我们可以通过dir()查看其所有的属性和方法。

dir(r)

直截取了一部分

#'data', 'decode_content', 'enforce_content_length', 'fileno', 'flush', 'from_httplib',# 'get_redirect_location', 'getheader', 'getheaders', 'headers', 'info', 'isatty',# 'length_remaining', 'read', 'read_chunked', 'readable', 'readinto', 'readline',# 'readlines', 'reason', 'release_conn', 'retries', 'seek', 'seekable', 'status',# 'stream', 'strict', 'supports_chunked_reads', 'tell', 'truncate', 'version', 'writable',# 'writelines']

二、post请求

import urllib3url = "http://httpbin.org"fields = {  'name':'xfy'}http = urllib3.PoolManager()r = http.request('post',url+"/post",fields=fields)print(r.data.decode())

可以看到很简单,只是第一个参数get换成了post。

并且参数不需要再像urllib一样转换成byte型了。

三、设置headers

import urllib3headers = {   'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}http = urllib3.PoolManager();r = http.request('get',url+"/get",headers = headers)print(r.data.decode())

四、设置代理

import urllib3url = "http://httpbin.org"headers = {   'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}proxy = urllib3.ProxyManager('http://101.236.19.165:8866',headers = headers)r = proxy.request('get',url+"/ip")print(r.data.decode())

五、当请求的参数为json

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表