
Python网络爬虫| Requests库的基本使用
发布日期:2021-05-10 06:27:40
浏览次数:23
分类:精选文章
本文共 3523 字,大约阅读时间需要 11 分钟。
Requests‡
Requests 是一个基于 Python 的 HTTP 库,与 urllib
相比更简单易用,是爬虫中推荐使用的工具。
安装
通过 pip
进行安装:
$ pip3 install requests
或者使用 easy_install
命令安装:
$ easy_install requests
也可以通过 PyCharm 的设置进行安装。
请求方式
请求方式
requests.get()
:获取资源requests.post()
:提交资源requests.put()
:替换资源requests.delete()
:删除资源requests.head()
:获取头信息requests.options()
:获取可选方法
导入方式
import requests
示例
获取 GitHub 资源:
r = requests.get('https://api.github.com/events')
提交 POST 请求:
r = requests.post('http://httpbin.org/post', data={'key': 'value'})
支持多种 HTTP 方法:
r = requests.put('http://httpbin.org/put', data={'key': 'value'})r = requests.delete('http://httpbin.org/delete')r = requests.head('http://httpbin.org/get')r = requests.options('http://httpbin.org/get')
参数传递
URL 参数
payload = {'key1': 'value1', 'key2': ['value2', 'value3']}r = requests.get('http://httpbin.org/get', params=payload)
JSON 参数
payload = { 'key1': 'value1', 'key2': 'value2'}r = requests.post('http://httpbin.org/post', json=payload)
响应内容
###默认编码
r.encoding
修改编码方式
r.encoding = 'ISO-8859-1'
二进制响应
from PIL import Imagefrom io import BytesIOr = requests.get('https://huaban.com/explore/miaoxingrenchahua.jpg')print(r.content)bi = BytesIO(r.content)print(bi)i = Image.open(bi)print(i)
解析 JSON
payload = { 'some': 'data'}r = requests.post('http://httpbin.org/post', json=payload)print(r.json())
原始响应
r = requests.get('https://api.github.com/events', stream=True)print(r.raw.read(10))
请求头设置
User-Agent 设定
url = 'http://www.baidu.com'headers = { 'User-Agent': 'myagent/2.21.0'}r = requests.get(url, headers=headers)
POST 请求
参数类型
data = { 'args': {}, 'data': '', 'files': {}, 'form': {}, 'headers': {}, 'json': null, 'origin': '...' # 分配来源地址}
字典数据
payload = { 'key1': 'value1', 'key2': 'value2'}r = requests.post('http://httpbin.org/post', data=payload)
元组数据
payload = ( ('key1', 'value1'), ('key1', 'value2'))r = requests.post('http://httpbin.org/post', data=payload)
JSON 数据
payload = { 'some': 'data'}r = requests.post('http://httpbin.org/post', json=payload)
文件上传
files = { 'file': ('file.txt', '文件内容\n')}r = requests.post('http://httpbin.org/post', files=files)
with open('file.txt', 'rb') as f: files = {'file': f}r = requests.post('http://httpbin.org/post', files=files)
响应状态码
状态码查询
r = requests.get('http://httpbin.org/get')r.status_code # 输出:200
状态码验证
print(r.status_code == requests.codes.ok) # 输出:True
状态码列表
{ 200: (...), 302: (...), 404: (...), 500: (...), # 其他状态码同理}
获取响应头
r = requests.get('http://httpbin.org/get')print(r.headers)
获取特定响应头
print(r.headers['Content-Encoding']) # 输出:gzip
重定向与请求历史
r = requests.get('http://github.com')print(r.url) # 输出:https://github.com/print(r.history) # 输出:[]
超时设置
# 超时仅影响连接时间requests.get('http://github.com', timeout=0.001)
调用异常示例
from urllib3.exceptions import ConnectTimeoutErrortry: r = requests.get('http://github.com', timeout=0.001)except ConnectTimeoutError: print("连接超时)
Cookies
获取 Cookie
url = 'http://www.baidu.com/some/cookie/setting/url'r = requests.get(url)print(r.cookies['cookie_name']) # 输出:cookie_value
自定义 Cookie 存储
jar = requests.cookies.RequestsCookieJar()jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')url = 'http://httpbin.org/cookies'r = requests.get(url, cookies=jar)print(r.text) # 输出:{"cookies": {"tasty_cookie": "yum"}}
以上操作均能够通过代码实现,Request 库极大简化了 HTTP 请求操作,适合开发爬虫和 API 调用任务。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月21日 20时14分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
wxWidgets源码分析(9) - wxString
2019-03-06
[梁山好汉说IT] 梁山好汉和抢劫银行
2019-03-06
[源码解析] 消息队列 Kombu 之 基本架构
2019-03-06
[源码分析] 消息队列 Kombu 之 启动过程
2019-03-06
wx.NET CLI wrapper for wxWidgets
2019-03-06
ASP.NET MVC Action Filters
2019-03-06
Powershell中禁止执行脚本解决办法
2019-03-06
OO_Unit2 多线程电梯总结
2019-03-06
04_Mysql配置文件(重要参数)
2019-03-06
JavaSE总结
2019-03-06
手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc
2019-03-06
Python IO编程
2019-03-06
CSS入门总结
2019-03-06
使用 TortoiseGit 时,报 Access denied 错误
2019-03-06
基于 HTML5 WebGL 的污水处理厂泵站自控系统
2019-03-06
django-表单之模型表单渲染(六)
2019-03-06
c++之程序流程控制
2019-03-06