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 Image
from io import BytesIO
r = 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 ConnectTimeoutError
try:
r = requests.get('http://github.com', timeout=0.001)
except ConnectTimeoutError:
print("连接超时)

Cookies

url = 'http://www.baidu.com/some/cookie/setting/url'
r = requests.get(url)
print(r.cookies['cookie_name']) # 输出:cookie_value
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 调用任务。

上一篇:SQL Server | 网上购物商城数据库设计报告(专业课设作品)
下一篇:Python开发入门(三) | itchat实现微信机器人

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月21日 20时14分33秒