爬虫003----requests库
Requests,连urllib官网上都说“对于更高坤别的HTTP客户端接口,建议使用Requests”,可见在网络请求中,Requests库的重要性,看官网logo都觉得我滴孩来,很架势
1. 介绍
Requests is an elegant and simple HTTP library for Python, built for human beings.
官网上很简短的一句话说明了一切,但,卧槽??专为人类构建???其他库是非人类是吧
官方商业吹捧来了,urllib官网夸了Requests可以解决更高级的问题,Requests官网又夸了urllib,他这么厉害得益于urllib。。。
2. 官方文档及Requests库导入
英文版文档链接: https://requests.readthedocs.io/en/latest/
# 使用前先pip一下
pip install requests# 然后导入
import requests
3. requests接口
感觉requests库比较简单粗暴💢一点,怪不得说人性化👨,比如一个requests.request(method, url, **kwargs)接口里的**kwargs,就包含了一堆参数,再比如urllib发送post请求需要解析data参数,带中文的参数还需要编码,requests库里通通不需要🙅♂️🙅♀️。。。直接冲
3.1 一个类型,六个属性
一个类型: resquests返回Response类型数据
六个属性:
- requests.text: 以字符串形式,返回网页源码
- requests.encoding: 访问或定制编码格式
- requests.url: 获取请求的url
- requests.content: 返回二进制数据
- request.status_code: 返回响应状态码
- requests.headers: 返回响应头信息
3.2 requests.request(method, url, **kwargs)
3.2.1 参数(常用)
- method: Request对象的方法:GET、OPTIONS、HEAD、POST、PUT、PATCH或DELETE。
- url: url
- params: (可选)字典,请求查询字符串中要发送的元组或字节列表。---- get请求参数
- data: (可选)字典,请求正文中要发送的元组、字节或类似文件的对象列表。---- post请求参数
- json: (可选)一个json可序列化的Python对象,用于在Request的正文中发送。
- headers:(可选)随请求一起发送的请求头字典。
- cookies: (可选)与请求一起发送的Dict或CookieJar对象---- 也可放到headers字典里,都实验过,都可以登录成功
- timeout (float、turple):(可选)超时访问最大时间
- allow_redirects (bool):(可选) 启用/禁用GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD重定向。默认为True。
- proxies: (可选)代理
举一个例子🌰搞定
import requestsurl = "https://www.baidu.com"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',#"Cookie":'"PSTM=1736416810; BIDUPSID=C6C1A7E58F43115193F1BA4A3642DA92; MAWEBCUID=web_MxzGXuqwyzQbYbhKtbsQHZNMWiZIIpWJsPzAbRCOdRyXQrXqAv; BDUSS=dTOXBmZEViMHBvaTNoVXFUUi1iWGNxZ1ZnVzVpTkUyZ35ydDlheTFqSnNVczVuSVFBQUFBJCQAAAAAAAAAAAEAAAA6WVM1ztLKx3N4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzFpmdsxaZnVz; BDUSS_BFESS=dTOXBmZEViMHBvaTNoVXFUUi1iWGNxZ1ZnVzVpTkUyZ35ydDlheTFqSnNVczVuSVFBQUFBJCQAAAAAAAAAAAEAAAA6WVM1ztLKx3N4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzFpmdsxaZnVz; BAIDUID=5A948F439CBBBEF7456C8B490134DC93:SL=0:NR=10:FG=1; H_WISE_SIDS_BFESS=62036_62090_62111; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_WISE_SIDS=62325_63243_63440_63563_63582_63578_63609_63587; BAIDUID_BFESS=5A948F439CBBBEF7456C8B490134DC93:SL=0:NR=10:FG=1; BDRCVFR[feWj1Vr5u3D]=mk3SLVN4HKm; delPer=0; PSINO=3; BA_HECTOR=85a4a0818l2421a58g2484208g858j1k59fc925; ZFY=m02LnhkxpNo28v8cAasQ0rASiBga2jtKh4rM:AV14l2w:C; H_PS_PSSID=61675_62325_63327_63440_63567_63563_63582_63578_63609_63587_63636_63647_63692; RT="z=1&dm=baidu.com&si=bcc17f10-2601-49c8-b9f8-148896d0718c&ss=mc4a0l78&sl=6&tt=fds&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf"; ab_sr=1.0.1_Y2FkMzg2NTVjM2FhZGUwZTVhMDU5N2YxMjExYjUzNGJjZjRkOThjODEyMmE1OGFjMmM3NjkwN2Q1Y2E4M2QwMWQzOWE5ZmRmODFkNzQ4Njk3ZDFiYzM5YjZjM2M2ZmYzOWIwOGEwZDYwYTJhNzRhY2E0OTI1MWE4OTJiZTZkZjc3OTAwMmQzOTMxM2RiZWQyYTlmM2M2OThkNWRlODkyYQ=="'
}
cookies = {"Cookie":'"PSTM=1736416810; BIDUPSID=C6C1A7E58F43115193F1BA4A3642DA92; MAWEBCUID=web_MxzGXuqwyzQbYbhKtbsQHZNMWiZIIpWJsPzAbRCOdRyXQrXqAv; BDUSS=dTOXBmZEViMHBvaTNoVXFUUi1iWGNxZ1ZnVzVpTkUyZ35ydDlheTFqSnNVczVuSVFBQUFBJCQAAAAAAAAAAAEAAAA6WVM1ztLKx3N4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzFpmdsxaZnVz; BDUSS_BFESS=dTOXBmZEViMHBvaTNoVXFUUi1iWGNxZ1ZnVzVpTkUyZ35ydDlheTFqSnNVczVuSVFBQUFBJCQAAAAAAAAAAAEAAAA6WVM1ztLKx3N4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzFpmdsxaZnVz; BAIDUID=5A948F439CBBBEF7456C8B490134DC93:SL=0:NR=10:FG=1; H_WISE_SIDS_BFESS=62036_62090_62111; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_WISE_SIDS=62325_63243_63440_63563_63582_63578_63609_63587; BAIDUID_BFESS=5A948F439CBBBEF7456C8B490134DC93:SL=0:NR=10:FG=1; BDRCVFR[feWj1Vr5u3D]=mk3SLVN4HKm; delPer=0; PSINO=3; BA_HECTOR=85a4a0818l2421a58g2484208g858j1k59fc925; ZFY=m02LnhkxpNo28v8cAasQ0rASiBga2jtKh4rM:AV14l2w:C; H_PS_PSSID=61675_62325_63327_63440_63567_63563_63582_63578_63609_63587_63636_63647_63692; RT="z=1&dm=baidu.com&si=bcc17f10-2601-49c8-b9f8-148896d0718c&ss=mc4a0l78&sl=6&tt=fds&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf"; ab_sr=1.0.1_Y2FkMzg2NTVjM2FhZGUwZTVhMDU5N2YxMjExYjUzNGJjZjRkOThjODEyMmE1OGFjMmM3NjkwN2Q1Y2E4M2QwMWQzOWE5ZmRmODFkNzQ4Njk3ZDFiYzM5YjZjM2M2ZmYzOWIwOGEwZDYwYTJhNzRhY2E0OTI1MWE4OTJiZTZkZjc3OTAwMmQzOTMxM2RiZWQyYTlmM2M2OThkNWRlODkyYQ=="'
}response = requests.request(method='GET', url=url, cookies=cookies, headers=headers)
response.encoding = 'utf-8'
print(response.text)
3.3 request.get(url, params=None, **kwargs)
发送get请求调用
**kwargs: 可以接收任意可接受的参数
类似于resquests.request(“GET”, url),kwargs可传递任何可识别参数,如前面urllib中 提到过的代理,只要添加一个proxies=proxies参数即可,参数接接受字典类型
举一个例子🌰搞定
import requestsurl = "https://www.baidu.com"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
proxy = {'http': '121.230.210.31:3256'
}
response = requests.get(url=url, headers=headers, proxies=proxy)
response.encoding = 'utf-8'print(response.content)
3.4 request.post(url, data=None, json=None, **kwargs)
发送post请求
类似于resquests.request(“POST”, url, data, json)
举一个例子🌰搞定
import jsonimport requestsurl = "https://fanyi.baidu.com/sug"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36','Cookie': 'PSTM=1736416810; BIDUPSID=C6C1A7E58F43115193F1BA4A3642DA92; MAWEBCUID=web_MxzGXuqwyzQbYbhKtbsQHZNMWiZIIpWJsPzAbRCOdRyXQrXqAv; BDUSS=dTOXBmZEViMHBvaTNoVXFUUi1iWGNxZ1ZnVzVpTkUyZ35ydDlheTFqSnNVczVuSVFBQUFBJCQAAAAAAAAAAAEAAAA6WVM1ztLKx3N4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzFpmdsxaZnVz; BDUSS_BFESS=dTOXBmZEViMHBvaTNoVXFUUi1iWGNxZ1ZnVzVpTkUyZ35ydDlheTFqSnNVczVuSVFBQUFBJCQAAAAAAAAAAAEAAAA6WVM1ztLKx3N4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGzFpmdsxaZnVz; BAIDUID=5A948F439CBBBEF7456C8B490134DC93:SL=0:NR=10:FG=1; H_WISE_SIDS_BFESS=62036_62090_62111; H_WISE_SIDS=61675_62325_63327_63440_63567_63563_63582_63578_63609_63636_63647_63692_63724_63729; BAIDUID_BFESS=5A948F439CBBBEF7456C8B490134DC93:SL=0:NR=10:FG=1; BA_HECTOR=252l0k2l2k8ka58l8h018ka5a1a00i1k5at9c24; ZFY=m02LnhkxpNo28v8cAasQ0rASiBga2jtKh4rM:AV14l2w:C; PSINO=3; delPer=0; BCLID=12162343736040037043; BCLID_BFESS=12162343736040037043; BDSFRCVID=5dAOJeC62ZyhnBvsoxWsEHtYogKKnW7TH6aoqFkaMFcr1-HjQo5GEG0nJU8g0Ku-S2OOogKKWmOTH7kLdm025Mh5OvbasvNsB9rXtf8g0x5; BDSFRCVID_BFESS=5dAOJeC62ZyhnBvsoxWsEHtYogKKnW7TH6aoqFkaMFcr1-HjQo5GEG0nJU8g0Ku-S2OOogKKWmOTH7kLdm025Mh5OvbasvNsB9rXtf8g0x5; H_BDCLCKID_SF=tRAOoC_-tDvtHJrwMDTD-tFO5eT22-usJCnC2hcH0KLKo4Tdhx5-KP4b3pb4Bn3kaKviabr6JMb1MRjvKfjO-fuz-pKDexvBLC8tKh5TtnrkSDnTDMRhqqJXXPnyKMniQKj9-pP52hRfDDt4jfcsjf4B-xQe-f6e0J5HhPbDfn02JKKu-n5jHjJLjGtH3D; H_BDCLCKID_SF_BFESS=tRAOoC_-tDvtHJrwMDTD-tFO5eT22-usJCnC2hcH0KLKo4Tdhx5-KP4b3pb4Bn3kaKviabr6JMb1MRjvKfjO-fuz-pKDexvBLC8tKh5TtnrkSDnTDMRhqqJXXPnyKMniQKj9-pP52hRfDDt4jfcsjf4B-xQe-f6e0J5HhPbDfn02JKKu-n5jHjJLjGtH3D; BAIDUEUID=462042455; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; H_PS_PSSID=61675_62325_63327_63485_63567_63563_63582_63578_63609_63587_63636_63647_63692_63724_63729; ab_sr=1.0.1_MTI3OWY4NDI1YzlkMzUzZDI5YzgyZDU2OGU4ZWFiYjE2Y2Q4OWE3NTY5MDEzZjY4MDIyODJkMTRkMDY1MmVhZDZmYTU5ODcyODEzNjAwNDk0OGI1YjRmMWYwYWY4NDhmY2RlMDU2OTBkNzZlZDk3Yzc1MmRlYWNlMDFkMGQ5YWQwN2I5ZDgwNDc0YzJjMTNjNTUwNmIxZTUzNGE3OWFlYzkyMTNlYzEzMWVlMTJmMjI3NzJhMThmOTdlNjZlNTExMDA4MjU5M2UxMWU3ZDVmYWY2Y2JlMGFiZDg3YmJlYWM=; RT="z=1&dm=baidu.com&si=ef1bcfc0-4fac-4f5c-9c90-e6732360cbd5&ss=mc66vrn9&sl=1&tt=29q&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=31z"'
}data = {"kw": "eye"
}response = requests.post(url=url, data=data, headers=headers)content = response.textobj = json.loads(content)
print(obj)
这几个例子🌰印证了开头的说法,requests发送无论是get还是post请求,都不需要格式化参数✅
3.5 requests.session()
传递一个携带session的请求,提供cookie持久性、连接池和配置。
☝️一个拓展知识点:
Session 的主要作用:
- 持久化 Cookies:
当你使用 Session 对象时,所有请求的响应 Cookies 会被自动保存到该会话中。这意味着在随后的请求中,可以自动发送这些 Cookies,而无需手动处理。例如,用于认证的 Cookies 可以在多个请求中保持会话。 - 保持连接:
使用 Session 可以为多个请求复用底层的 TCP 连接,这样可以减少连接的开销,提高请求的效率。 - 共享请求参数:
可以在 Session 对象中设置请求头、认证信息等,这样在通过该会话发送的所有请求都将自动使用这些设置。例如,如果你需要为所有请求设置一个通用的身份验证 token,可以在 Session 中配置。 - 自动管理重定向和错误处理:
使用 Session 时,库会自动处理 HTTP 的 3xx 重定向和一些错误条件,如身份认证失败等,更加便捷。
import requestssession = requests.session()
response = session.get("https://www.baidu.com")
print(response.content)
常用requests库知识就over🔚了,requests还有其他类方法的使用比如Resopnse方法等,如果以后使用到发现也是比较常用,再补充,否则就直接对着文档📓查就可以,一天肝了两个知识点的总结,累😮💨