① 数据请求
本文即将看到:
⚬ ------ urllib库
⚬ ------ requests库
一、urllib库(内置)
1. request模块的使用:
urlopen函数
所有和网络请求有关的方法,都被收集到 urllib.request模块下.
使用
from urllib import request
标识符 = request.urlopen(url,timeout = time) //timeout=设置超时
标识符.read() //读取 (count)读取字节数
标识符.readline() //读取一行
标识符.readlines() //读取多行
解释
url: 请求url
data: 请求的打他,如果设置这个值,那么将变成post请求
示例
# encoding:utf-8
from urllib import request
url = 'https://www.cnblogs.com/okup/p/12819388.html' //本站
res = request.urlopen(url) //urlopen发起HTTP请求
print(res.read()) //read()函数返回二进制
print(res.read().decode("utf-8")) //decode()进行解码
request.Request
修改请求头
post请求(可选)
# encoding:utf-8
from urllib import request
url = 'https://www.cnblogs.com/okup/p/12819388.html' //本站
headers(标识符) = {
"User-Agent": value ,
"Cooike": value,
"Referer": value,
} //设置请求头
data = {
} //设置data,使用post请求
方式一:
set(标识符) = request.Request(url, headers=hearders) //传入参数
htt(标识符) = request.urlopen(set) //请求
print(htt.read().decode())
方式二:
// 设置post请求
set(标识符) = request.Request(url, headers=hearders, data=data, method="POST") //data = parse.urlencode("utf-8")
htt = request.urlopen(set)
print(htt.read().decode())
代理
# encoding:utf-8
from urllib import request
url = 'https://www.cnblogs.com/okup/p/12819388.html' //本站
//设置代理
hander = request.ProxyHandler({"http": "地址:端口号"}) //设置代理地址
operate = request.build_opener(hander)
a = request.Request(url) //发送request请求
resp = operate.open(url) //使用代理访问
print(resp.read())
urlretrieve函数
将网页上的文件保存到本地
使用
from urllib import request
request.urlretrieve(url,"文件名.文件格式")
2.parse模块的使用:
urlencode函数
编码解码在parse模块下
编码
from urllib import parse
parse.urlencode()
3.robotparser模块
Robots爬虫协议
from urllib import robotparser
rp = robotparser.RobotFileParser() //设置robots.txt的链接
rp.set_url('链接/robots.txt')
rp.read() //读取robots.txt文件并进行分析
parse_qs函数
解码
from urllib import parse
parse.parse_qs()
二、requests库(推荐)
安装 pip install requests
requests支持各种请求方式: GET、POST、PUT、DELETE、HEAD、OPTION.
1.HTTP请求
常用
r1 = requests.get(url)
r2 = requests.post(url)
注意
● url里有中文则会自动转码
● post,如果传入的是str,则会直接发送出去
● 可通过json参数传递dict,会自动传唤为JSON字符串
● post可通过设置file参数上传文件
设置请求头
headers = {'...':'...'}
proxies = {'https':'...:端口号', 'http':'...'} //代理
timeout = 15(value) //超时
data ={'...':'...' }
//使用
r1 = requests.get(url, headers=headers, proxies=proxies, timeout=30)
// post请求要有data=参数
res = requests.post(url, headers=headers, proxies=proxies, timeout=30)
2.处理返回结果
字段 | 描述 |
---|---|
status_code | 获取状态码 |
reason | 状态信息 |
content | 获取byte类型的返回结果 |
json | 解析序列化为JSON格式的数据 |
text | 获取str类型的返回结果,可以在text调用前用.encode=指定编码类型 |
3.cookie设置
cookie获取
# encoding:utf-8
import requests
url = 'https://www.cnblogs.com/okup/'
re = requests.get(url)
print(re.cookies.get_dict()) //cookies获取 gte_dict()方法返回字典类型
session
//用于跨请求保持一些参数,常用于cookie
#encoding:utf-8
import requests
url = 'https://www.cnblogs.com/okup/'
sess = requests.Session()
sess.post(url)
4.处理不信任SSl
说明
现在大部分网站都采用HTTPS,不可避免会涉及一些证书问题,如果遇到一些网站自发的证书,可以添加参数 verify=False 来处理错误
示例
# encoding:utf-8
import requests
url = 'https://www.cnblogs.com/okup/'
re = requests.get(url,verify=False) //设置参数