Requests库的主要方法
Requests库的7个主要方法
+---------------------------------------+---------------------------------------------------------------------------+
| 方法 + 说明 |
| requests.request() + 构造一个请求,支撑一下个方法的基础方法 |
| requests.get() + 获取HTML网页的主要方法,对应于HTTP的GET |
| requests.head() + 获取HTML网页信息头部的方法,对应于HTTP的HEAD |
| requests.put() + 向HTML网页提交POST请求方法,对应HTTP的POST |
| requests.patch() + 向HTML网页提交局部修改请求,对应于HTTP的PATCH |
| requests.delete() + 向HTML页面提交删除请求,对应于HTTP的DELETE |
+---------------------------------------+----------------------------------------------------------------------------+
HTTP协议
URL格式 http://host[:port] [path]
host:合法的 Internet主机域名或IP地址
port:端口号,取胜端口有为80
path:请求资源的路径
HTTP协议 URL实例:
HTTP URL的理解:
URL是通过HTTP协议存取资源的Internet路径,
一个URL对应一个数据资源
HTTP协议对资源的操作
+------------------------------------+------------------------------------------------------------------------------------------------------+
| GET + 请求获取URL位置的资源 |
| HEAD + 请求获取URL位置资源的响应消息报告,机获得该资源的头部信息 |
| POST + 请求向URL位置的资源后附加新的数据 |
| PUT + 请求想URL位置存储一个资源,覆盖原URL位置的资源 |
| PATCH + 请求局部更新URL位置资源,即改变该处资源的部分内容 |
| delete + 请求删除URL位置存储的资源 |
+----------------------------------+--------------------------------------------------------------------------------------------------------+
r = requests.head('http://httpbin.org/get')r.headersr.text#向URL POST一个字典自动编码为from(表单)payload ={'key1':'value1','key2':'value2'}r = requests.post('http://httpbin.org/post',data = payload)print(r.text)
#向URL POST一个字符串 自动编码为datar = requests.put('http://httpbin.org/put',data = 'ABC')print(r.text)
#将原有数据覆盖掉payload ={'key1':'小可爱','key2':'珂珂珂'}r = requests.put('http://httpbin.org/put',data = payload)print(r.text)
#requests库 虽然标准的urllib库中模块已经包含了平时我们使用的大部分功能,但API终究还是不够友好,request再次基础上进行了封装,使用起来更加简洁
安装 pip install requests 其中文文档和github源码可以自己百度 中文文档:https://2.python-requests.org//zh_CN/latest/index.html github源码 :https://github.com/psf/requests
1.发送GET请求 response = request.get(‘http://www.baidu.com’) 2.添加参数 get 请求是将数据放在url中,我们可以通过指定params和headers参数来填充请求参数 response = request.get(‘http://www.baidu.com’, params = cs, headers = head) 3.查询参数 response对象有很多参数 .text 根据猜测自动将返回的字节流数据进行解码成unicode格式的数据,有时可能会因为判断失误而造成乱码 .content 返回网络传输的原始的字节流(byte)数据,一般网络传输和硬盘存储的都是字节流数据 .url 查看当前请求的URL地址 .encoding 查看相应头部字符编码 .status_code 查看响应吗
import requests
from urllib import parse
head = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
cs = {'wd':'中国'}
response = requests.get('https://www.baidu.com/s?', headers = head, params = cs)
with open('../laji/w.html', 'w', encoding = 'utf-8') as fp:
fp.write(response.content.decode('utf-8'))
print(parse.parse_qs(response.url))
print(response.encoding)
print(response.status_code)
123456789101112131415
1.发送POST请求 与GET唯一不同的是发送的数据变成了DATA
import requests
url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false'
head = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
'Referer':'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
'Cookie':''
}
data = {'first':'true',
'pn':'1',
'kd':'python'
}
response = requests.post(url, headers = head, data = data)
print(type(response.json()))
print(response.json())
123456789101112131415
如果返回的是一个js数据,可以使用json去处理。可以使用py内置的josn去处理,也可使使用调用.json方法处理,json的本质是一个字符串,json() 可以直接将网页中的数据以json格式(字典)处理
3.使用代理 在请求方法的时候设置 peosies 参数即可
import requests
url = 'http://httpbin.org/ip'
proxy = {'http':'49.51.193.134:1080'}
response = requests.get(url, proxies = proxy)
print(response.text)
1234567
比较一下IP,发现IP不同了,代理成功
4.取得cookie response.cookies.get_dict() 如上可以取得cookies, 如果想按照字典的方式打印,可以使用get_dict()方法
session web 里保存在服务器里数据的一种机制,这里的session 是原本会议的意思,
import requests
head = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
data = {
'email':'ID',
'password':'密码'
}
login_url = "http://www.renren.com/ajaxLogin/login?"
url = "http://www.renren.com/972992926/newsfeed/photo"
session = requests.Session()
session.post(login_url, data = data, headers = head)
response = session.get(url, headers = head)
with open('../laji/w.html', 'w', encoding = 'utf-8') as fp:
fp.write(response.text)
123456789101112131415161718
5.处理不合法的SSL证书 有些网站是走https协议的,但协议前打了个X,说明该网站的证书不是官方认证的,比如自己写的什么的。 此时,需要在请求的时候将,verify = false 设置一下。
response = session.get(url, headers = head, verify = False)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通