requests 模块

1. requests 是用 Python 语言编写的、优雅而简单的 HTTP 库
2. requests 内部采用来 urillib3
3. requests 使用起来肯定会比 urillib3 更简单便捷
4. requests 需要单独安装

GET 和 POST

  • 通过 requests 发送一个 GET 请求,需要在 URL 里请求的参数可通过 params 传递

  • 与 GET 不同的是,POST 请求新增了一个可选参数 data,需要通过 POST 请求传递 body 里的数据可以通过 data 传递

requests 发送 GET 请求

案例 1:处理文本数据

[root@localhost xxx]# pip3 install requests  # 安装requests软件包
# 使用requests处理文本数据,使用text查看【get】
[root@localhost xxx]# python3
>>> import requests  # 导入requests模块
>>> url = 'http://www.163.com'    # 声明变量,定义要操作的网页
>>> r = requests.get(url)  # 请求,获取网页内容,赋值给变量r
>>> r.text  # 查看网页内容,因为是文本类型的,采用text查看

案例 2:处理图片视频音频等数据

>>> url2 = 'http://pic1.win4000.com/wallpaper/6/58f065330709a.jpg'  # 声明变量,定义查看的图片
>>> r2 = requests.get(url2)  # 请求,获取bytes类型的图片数据,赋值给变量r
>>> r2.content  # 查看图片内容,因为是图片类型的,采用content查看
>>> with open('/tmp/aaa.jpg', 'wb') as fobj:  # 将图片数据保存在文件aaa.jpg中
...     fobj.write(r2.content)
[root@localhost xxx]# eog /tmp/aaa.jpg         #在终端使用eog打开图片aaa.jpg

练习:下载新浪首页图片

import re,os,requests
def download(url, fname):  # 定义下载资源函数
    with open(fname, mode="wb") as fw:
        fw.write(requests.get(url).content)
def get_url(fname, patt): # patt: 匹配图片正则 fname: 正则匹配文本的路径
    result = [] # 定义存储图片url地址的列表
    patt_obj = re.compile(patt) # 编译正则表达式 patt_obj: 正则对象,可用于匹配数据
    with open(fname, mode="r") as fr:
        for item in fr.readlines():
            data = patt_obj.search(item) # 匹配图片链接
            if data != None: # 匹配成功
                    result.append(data.group())
    return result
if __name__ == '__main__':
    if os.path.exists("/opt/myweb.html") == False: # 将网页源代码数据存到/opt/myweb.html
        download("https://www.sina.com.cn/", "/opt/myweb.html")
    if os.path.exists("/tmp/images") == False: # 指定图片下载的目录 /tmp/images
        os.mkdir("/tmp/images")
    pic_patt = "(http|https)://[\w\./-]+\.(jpg|jpeg|png)" # 匹配图片的正则表达式
    res_list = get_url("/opt/myweb.html", pic_patt) # 返回图片url列表
    for item in res_list:
        download(item, "/tmp/images/"+os.path.basename(item))

案例 3:处理 json 格式的数据

**天气预报查询**

- 搜索 **中国天气网  城市代码查询**, 查询城市代码
- 城市天气情况接口
  - 实况天气获取: http://www.weather.com.cn/data/sk/城市代码.html

>>> url3 = 'http://www.weather.com.cn/data/sk/101130101.html'  # 声明变量,指定乌鲁木齐城市天气的网页路径
>>> r3 = requests.get(url3)  # 请求,获取bytes类型的图片数据,赋值给变量r
>>> r3.json()  # json(), 查看json类型的数据,乱码【字符集错误】
>>> r3.encoding  # 查看获取网页数据的字符集
'ISO-8859-1'
>>> r3.encoding = 'utf8'  # 将网页数据,转换为'utf8'格式
>>> r3.json()  # json(), 查看json类型的数据【utf8】

设定头部

- 用户也可以自己设定请求头
- 获取网站的【User-Agent】请求头信息

# 用户自己设定请求头,查看Forbidden禁止访问的网站
[root@localhost xxx]# python3
>>> js_url = 'http://www.jianshu.com'  # 声明变量,指定简书的网站
>>> headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}                    #声明访问网站的请求头
>>> r = requests.get(js_url, headers=headers)        #获取简书网页数据, 自定义请求头
>>> r.text  # 以文本的方式,查看数据内容【Forbidden 简书网站进行了反爬虫设置】

请求参数

- 当访问一个 URL 时,我们经常需要发送一些查询的字段作为过滤信息,例如:httpbin.com/get?key=val,这里的 key=val 就是限定返回条件的参数键值对
- 当利用 python 的 requests 去发送一个需要包含这些参数键值对时,可以将它们传给params

import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}
# 这是目标url
# url = 'https://www.baidu.com/s?wd=python'
url = 'https://www.baidu.com/s?'
# 请求参数是一个字典 即wd=python
kw = {'wd': 'python'}
# 带上请求参数发起请求,获取响应
response = requests.get(url, headers=headers, params=kw)
print(response.text)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值