目 录
1、urllib库
2、Requests介绍
requests.request() 方法介绍,响应参数
3、参数传递
get方式,post方式,文件方式,字符串方式,代理
4 、 异常处理
5 、登陆操作
账号与密码,cookies,session
这是程序自带的库,不需要安装。
#coding:utf-8
from urllib.request import urlopen
url = "http://www.zuihaodaxue.com/BCSR/wangluokongjiananquan2018.html"
html = urlopen(url,timeout = 10)
#常用的方法:
print(html.read())
print(html.read().decode("utf-8"))
print(html.info())
print(html.getcode())
这将会输出 这个网页的全部 HTML 代码。
原理:
现在大多数网页需要加载许多相关的资源文件。当网络浏览器遇到一个标签时,比如 ,会向服务器发起一个请求,以获取 cuteKitten.jpg文件中的数据为用户充分渲染网页。
但是,我们的 Python 程序没有返回并向服务器请求多个文件的逻辑,它只能读取我们已经请求的单个 HTML 文件。
工具介绍:
urllib 是 Python 的标准库,包含了从网络请求数据,处理 cookie,甚至改变像请求头和用户代理这些元数据的函数。
urlopen 用来打开并读取一个从网络获取的远程对象。因为它是一个非常通用的库(它可以轻松读取 HTML 文件、图像文件,或其他任何文件流)。
requests.request()
requests.get() 获取URL信息
requests.head() 获取头信息
requests.post() 提交附加数据的请求
requests.put() 提交覆盖原有URL的请求
requests.patch() 提交修改请求
requests.delete() 提交删除请求
requests.request(method,url,**kwargs)
method: 两个参数 ,get/put
**kwargs: 13个参数
params: 字典或字节(查询参数)
data: 字典、字节或文件对象(请求内容)
json: json格式的数据(请求内容)
headers:字典(HTTP定制)
auth: 元组(HTTP认证)
files: 字典类型,传输文件
timeout:设置超时(秒)
proxies:字典类型(代理)
response = requests.get(url, params=None, **kwargs)
response.text 获取响应文本
response.content 获取网页上的二进制图片、视频
response.encoding = response.apparent_encoding 获取网页编码
response.status_code 获取响应状态码
response.headers 获取响应头信息
response.cookies 获取cookies信息
response.url 获取url信息
response.history 获取history信息
get方式提交:
import requests
payload = {'key1': 'value1', 'key2': 'value2', 'key3': None}
r = requests.get('http://xxx', params=payload)
Post表单如下:
import requests
params = {'firstname': 'Ryan', 'lastname': 'Mitchell'}
r = requests.post("url1", data=params)
print(r.text)
上传图片文件的表单如下:
import requests
url = 'http://xxx/post'
files = {'upload File': open('../files/Python-logo.png', 'rb')}
r = requests.post("url1",files=files)
字符串JSON处理:
import requests
import json
url = 'https://xxx'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))
#或者
r = requests.post(url, json=payload)
代理
import requests
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
requests.get('http://xxxx.com', proxies=proxies)
重定向
r=requests.head('http://github.com', allow_redirects=True)
import requests
from requests.exceptions import ReadTimeout,HTTPError,RequestException
try:
response = requests.get('http://www.baidu.com',timeout=0.5)
print(response.status_code)
except ReadTimeout:
print('timeout')
except HTTPError:
print('httperror')
except RequestException:
print('reqerror')
HTTPError:如果 HTTP 请求返回了不成功的状态码
ReadTimeout:请求超时
ConnectionError:遇到网络问题(如:DNS 查询失败、拒绝连接等)
TooManyRedirects:若请求超过了设定的最大重定向次数
RequestException:所有的requerst 异常
loginurl='https://xxxxx.com/check'
formData={'username':'*****','password':'*****'}
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/52.0'}
res=requests.post(loginurl,data=formData,headers=headers)
raw_cookies="k1=v1; k2=v2; k3=v3;
cookies={}
for line in raw_cookies.split(';'):
key,value=line.split('=',1)
cookies[key]=value
loginurl='http://xxxxxx.com'
res=requests.post(loginurl,cookies=cookies)
print(res.content)
其中的cookies获取后将cookies的值以字典的方式存储,然后进行使用。
大多数新式的网站都用 cookie 跟踪用户是否已登录的状态信息。有的网站经常暗自调整cookie,或者如果你从一开始就完全不想要用 cookie,那么 Requests 库的session函数可以完美地解决这些问题。会话(session)对象(调用 requests.Session() 获取)会持续跟踪会话信息,像 cookie、header,甚至包括运行 HTTP 协议的信息。
import requests as req
s=req.Session()
param={'username':'****','password':'***'}
url='https://xxxxxx'
r=s.post(url,data=param,verify=False) #登录获取登录后的session
print(r.content)
如果有ssl认证,可以在post的时候,加入认证的参数,取消ssl的认证校验 requests.post(url,data=dataform,verify=False)