1. requests 是用 Python 语言编写的、优雅而简单的 HTTP 库
2. requests 内部采用来 urillib3
3. requests 使用起来肯定会比 urillib3 更简单便捷
4. requests 需要单独安装
通过 requests 发送一个 GET 请求,需要在 URL 里请求的参数可通过 params 传递
与 GET 不同的是,POST 请求新增了一个可选参数 data,需要通过 POST 请求传递 body 里的数据可以通过 data 传递
[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查看
>>> 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))
**天气预报查询**
- 搜索 **中国天气网 城市代码查询**, 查询城市代码
- 城市天气情况接口
- 实况天气获取: 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)