requests模块是一款基于网络请求的python三方库,具有功能强大,简单便捷,效率较高的特点。其功能在于模拟浏览器发请求。
1、requests基本功能
import requests
#1、准备请求地址
url = '<https://cd.zu.ke.com/zufang>'
#2、发送请求
#requests.get(url) -对指定地址发送请求,得到服务器返回的数据响应
response = requests.get(url)
#3、获取请求结果
result = response.text
print(result)
2、requests详解
安装:pip install requests -i https://pypi.doubanio.com/simple
2.1 爬虫实现步骤
-
指定url
-
基于requests模块发送请求
-
获取服务器响应数据
-
持久化存储
import requests
# 1、准备请求地址
url = '<https://cd.zu.ke.com/zufang>'
# 2、发送请求
response = requests.get(url)
print(response)
# 3、获取响应内容
# 1)获取响应头(响应头包含了返回数据的基本信息)
print(response.headers)
# 2)获取状态码
print(response.status_code)
if response.status_code == 200:
pass
else:
pass
# 3)修改编码方式 -如果请求乱码就修改
# 注意:乱码的时候修改编码方式,必须在获取请求结果之前
response.encoding = 'utf-8'
# 4)获取请求结果
# a、响应对象.text -返回字符串类请求结果(请求地址是网页地址)
print(response.text)
# b、响应对象.content -返回二进制类型(bytes)的请求结果(请求地址是文件地址、图片、视频、音频)
# c、响应对象.json() -返回值根据json数据格式的不同可能不一样(针对请求地址是json数据接口)
2.3 常用属性/方法
请求属性/方法
属性/方法 | 描述 |
---|---|
requests.get(url,[params],[headers]) | get请求函数,实现get请求 |
requests.post(url,[data],[headers]) | post请求函数,实现post请求 |
响应属性/方法
属性 | 描述 |
---|---|
response.encoding | 编码方式 |
response.text | Unicode型数据 |
response.content | 字节型数据(二进制) |
status_code | 状态码 |
response.cookies | cookies值 |
response.headers | 响应头信息 |
response.request.headers | 请求头信息 |
方法 | 描述 |
response.json() | 获取json数据 |
import requests
# 1、确定抓取网站网址
url = "https://www.baidu.com/"
# 2、通过requests模块发送请求
response = requests.get(url)
response.encoding = 'utf-8'
# 3、获取服务器响应
print(response.text) # 响应文本
print(response.status_code) # 200
print(response.url) # https://www.baidu.com/
print(response.encoding) # utf-8
print(response.cookies) # <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
print(response.headers) # 响应头信息
print(response.headers.get("Content-Type"))
print(response.request.headers) # 请求头信息
print(response.request.headers.get("User-Agent"))
3、文件下载
#1、准备下载地址
import requests
url = '<https://img2.baidu.com/it/u=267632856,3740526320&fm=253&fmt=auto&app=120&f=JPEG?w=1280&h=800>'
#2、发送请求
response = requests.get(url)
#3、获取请求结果
result = response.content
#将图片写入到文件中
with open('files/艾斯.jpeg','wb') as f:
f.write(result)
4、数据接口
#1、准备数据接口
import requests
url = '<https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js>'
response = requests.get(url)
#获取请求结果
result = response.json()
for x in result['hero']:
print(x['name'])
4.1 什么是json
json就是一种通用数据格式,主要用于客户端和服务器之间进行文本数据的传输
4.2 json支持的数据类型
- 数字类型:相当于python中的int+float,表示的时候直接写,也可以科学计数法
- 字符串:只能用双引号
- 布尔:true 真,false 假 都是小写
- 数组:相当于python的列表,[数据1,数据2,。。。]
- 字典:json字典的键只能是字符串
4.3 python与json数据之间的转换
-
json转python
python中json模块提供了各种个json相关功能的函数
from json import loads,dumps
'''
loads函数
json python
数字 int、float
字符串 str(双引号会变成单引号)
布尔 bool;true -> True、false -> False
数组 list
字典 dict
'''
# loads(json格式的字符串) - 将json数据转换成对应的Python数据
# json格式的字符串 - 字符串内容是json数据的字符串
result = loads('100') # 100
print(type(result))
result = loads('"abc"') # 'abc'
print(type(result))
result = loads('true') # True
print(result)
result = loads('[100, "abc", 200]') # [100, 'abc', 200]
print(result)
result = loads('{"10": 20}') # {'10': 20}
print(result)
- python转json
# 2)python转json - dumps函数
"""
python json
int、float 数字
str 字符串; 单引号字符串会变成双引号
bool True -> true、False -> false
list、tuple 数组
dict 字典
"""
# dumps(python数据) - 将python数据转换成对应的json格式字符串
dumps(100) # '100'
dumps(True) # 'true'
dumps('abc') # '"abc"'
result = dumps({'name': '小明', 'age': 18, 'is_m': False, 10: 20}) # '{"name": "小明", "age": 18, "is_m": false, "10": 20}'
print(result, type(result))
5. request实例
按请求方式的不同,requests抓取数据请求方式分为:get请求、post请求、异步请求、接口API请求等。
5.1 搜狗关键字查询(get)
# 导入request模块
import requests
# 1、确定抓取网站网址
url = "https://www.sogou.com/web?query=大数据"
header= {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
# 2、通过responses模块发送请求
response = requests.get(url, headers=header)
response.encoding = "utf-8"
# 3、获取服务器响应
page_text = response.text
print(page_text)
5.2 百度翻译(post|异步)
import requests
# 1、确定抓取网站网址
url = "https://fanyi.baidu.com/sug"
data = {
"kw": "dog"
}
header = {
"User-Agent": "Mozilla/5.c0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
# 2、通过responses模块发送请求
response = requests.get(url, data=data, headers=header)
response.encoding = "utf-8"
# 3、获取服务器响应
page_json = response.json()
print(page_json)
5.3 API接口
API接口访问
接口名称 | 接口地址 |
---|---|
免费API | 免费API - 免费提供API服务 |
木小果API | https://api.muxiaoguo.cn/ |
韩小韩API接口站 | 韩小韩API接口站 - 免费API数据接口调用服务平台 |
ALAPI | ALAPI |
Sky▪API | Sky▪API - 专注免费稳定的api |
import requests
url = "https://jsonplaceholder.typicode.com/posts"
resp = requests.get(url)
print(resp.json()) # 接口通常返回json格式数据