python request和urllib_Python-网络请求urllib库和requests库

1. urllib.request模块

模块定义了身份验证、重定向、cookies等应用中打开Url(主要是HTTP)的函数和类。

1)urlopen方法

def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,

*, cafile=None, capath=None, cadefault=False, context=None):

#参数 url:可以是一个URL也可以是一个Request 对象

#参数 data:当data为None时发起get请求,否则发起post请求,此时data要进行encode

#cafile,capath,cadefault,证书相关参数

#实例1

from urllib.request import urlopen

url = "http://www.bing.com"

response = urlopen(url)

print(response.closed) #未关闭

with response:

print(type(response)) #response 类型

print(response.status) #输出请求状态

print(response.geturl()) #输出访问的网页url

print(response.info()) # 输出header

print(response.read().decode('utf-8')) #输出返回的网页内容

print(response.closed) #关闭

urlopen 方法只能传递url和data这样的数据,不能构造HTTP的请求,例如User-Agent

from urllib.request import urlopen,Request

url = "http://www.bing.com"

req = Request(url)

header = {'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Mobile Safari/537.36'}

#伪装浏览器 添加User-Agent

req.add_header(header)

response = urlopen(req)

with response:

print(response.info()) # 输出header

print(response.read().decode('utf-8')) #输出返回的网页内容

注意:urlopen 打开的url,返回的如果是301,302,会在responseHeader中返回location进行重定向,urlopen会自动跳转到新地址

2)parse模块

该模块可以完成url的编解码。对冒号、斜杆、&、等号等符号编码解码。

一般来说url中的地址部分,不需要使用中文路径,但是参数部分,不管get还是post方法,提交的数据中可能有斜杠、等号、问好等符号,这样这些字符表示数据,不表示元字符,如果直接发给服务器端,就会导致接收方无法判断谁是元字符,谁是数据了。

为了安全,一般会将数据部分的字符进行url编码,按照字符集的encoding要求转换成字节序列,每一个字节对应的十六进制字符串前加上百分号即可。

编码:

dict = {'name':'zhangsan'}

u = parse.urlencode(dict)

解码:

x = parse.unquote(u)

3)simplejson 模块

对网络请求返回的json字符串进行解析

from urllib import urlopern,Request

from urllib import parse

import simplejson

url = 'http://httpbin.org/post'

data = pare.urlencode({'name':'张三,@=、&*','age':'6'})

agent = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Mobile Safari/537.36'

req = Request(url,headers={'User-agent':agent})

with urlopen(req,data = data.encode()) as response:

text = response.read()

d = simplejson.loads(text)

print(d)

print(type(d))

2.requests 基础用法

requests库是我们常用的网络请求库,使用非常广泛。

1) 常用方法:

requests.request(method,url,** kwargs)

requests.post(url,data,** kwargs)

requests.get(url,params,** kwargs)

method:请求方法,get,post等

url:请求地址

params:参数,可选

**kwargs:12个控制访问的参数,如

header:字典,http请求头,用来模拟任何我们想模拟的浏览器来对url发起访问

data:字典、字节或文件对象,作为request的内容,与params不同的是,data提交的数据并不放在url链接中,而是放在URL链接对应位置的地方作为数据来存储,也可以接收字符串。

json:json格式数据,在web开发中常见,作为内容部分向服务器提交。

cookies:从http中解析cookie

auth:元组,用来支持http认证功能

files:字典, 是用来向服务器传输文件时使用的字段

timeout:用于设定超时时间, 单位为秒,当发起一个get请求时可以设置一个timeout时间, 如果在timeout时间内请求内容没有返回, 将产生一个timeout的异常。

proxies:字典, 用来设置访问代理服务器。

allow_redirects:布尔,表示是否允许对url进行重定向,默认为True。

stream:布尔,指是否对获取内容进行立即下载,默认为True。

verify:布尔,用于认证SSL证书,默认为true。

cert: 用于设置保存本地SSL证书路径

Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。

请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 r.text 之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它。

响应返回response对象部分属性:

status_code:http请求的返回状态,200表示成功。

text:响应内容的字符串形式,返回的页面内容,

url:最终的url定位

request:对应的http请求对象,可以获得请求头等信息

encoding:从http header中猜测的相应内容编码方式

apparent_encoding:从内容分析出的响应内容编码方式

content:http响应内容的二进制形式

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页