静态网站爬取入门:爬虫的Requests库的核心用法与实战案例
·
一、什么是 Requests 库?
1. 通俗理解 Requests 库
你可以把 Requests 库想象成一个 "自动浏览器"—— 它能帮你自动打开网页、获取内容,还能模拟你在网页上的操作(比如点击查询按钮)。只不过它不是用图形界面显示内容,而是把网页数据以代码的形式返回给你。
比如你想查看 "百度首页" 的内容,用 Requests 库写几行代码,就能把百度首页的所有文字、图片地址等信息都获取到,而不用你手动打开浏览器。
2. Requests库安装
在命令行下输入如下命令
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple(清华源)
二、Requests 库的核心用法:发送请求获取数据
1. 最基础的 GET 请求(获取网页内容)
GET 请求是最常用的功能,就像你在浏览器地址栏输入网址并按回车 —— 目的是 "获取" 网页内容。
语法格式:
import requests # 导入Requests库
# 发送GET请求,获取网页内容
response = requests.get("目标网页的网址")
# 打印获取到的内容(网页的HTML代码)
print(response.text)
实例 1:获取百度首页内容
import requests
# 目标网址:百度首页
url = "https://www.baidu.com"
# 发送请求
response = requests.get(url)
# 打印结果(网页的HTML代码)
print(response.text)
运行后,你会看到一大串代码,这就是百度首页的 HTML 源代码 —— 所有网页都是用这种代码编写的,浏览器只是把它转换成了我们看到的图形界面。
2. 带参数的 GET 请求(像 "搜索" 一样查信息)
很多时候,我们需要在网页上 "查询" 信息(比如查手机号归属地、查天气),这时候网址里会带参数。
Requests 库可以用字典来处理这些参数,让代码更清晰。
语法格式:
import requests
# 1. 定义基础网址(不带参数的部分)
base_url = "目标网址的基础部分"
# 2. 用字典定义参数(键是参数名,值是参数内容)
params = {
"参数1名": "参数1值",
"参数2名": "参数2值"
}
# 3. 发送带参数的GET请求(用params参数传入字典)
response = requests.get(base_url, params=params)
# 4. 打印结果
print(response.text)
实例 2:查询手机号归属地
import requests
# 基础网址(手机号查询的基础页面)
base_url = "https://www.ip138.com/mobile.asp"
# 定义参数:要查询的手机号和查询类型
params = {
"mobile": "手机号", # 要查询的手机号
"action": "mobile" # 固定参数,告诉网站这是手机号查询
}
# 发送带参数的请求
response = requests.get(base_url, params=params)
# 打印结果(包含归属地信息的HTML代码)
print(response.text)
三、实战案例 :批量下载 QQ 表情包(下载图片)
1.任务目标
从http://www.bspider.top/yh31/网站下载多张表情包图片,保存到电脑的D:\表情包文件夹里。
2.准备工作
- 先在电脑
D盘手动创建一个名为表情包的文件夹(必须做,否则会报错); - 找到要下载的图片网址(可以通过浏览器开发者工具获取,这里直接提供两个示例网址)。
3.完整代码
import requests # 导入库
def get_image(url):
"""获取单张图片的二进制数据"""
try:
# 发送请求,超时时间10秒
response = requests.get(url, timeout=10)
# 检查请求是否成功(不是200就报错)
response.raise_for_status()
# 返回图片的二进制数据(图片、视频都是二进制)
return response.content
except Exception as error:
print(f"下载失败:{error}")
return None
def save_image(save_path, image_data):
"""把图片数据保存到本地文件"""
# 用二进制写入模式打开文件(图片必须用"wb"模式)
with open(save_path, "wb") as f:
f.write(image_data) # 写入图片数据
print(f"保存成功:{save_path}")
if __name__ == "__main__":
# 要下载的图片网址列表
image_urls = [
"http://www.bspider.top/static/yh31/images/202103302056530751.gif",
"http://www.bspider.top/static/yh31/images/202103182029425871.jpg"
]
# 保存图片的文件夹(已提前创建)
save_folder = "D:\\表情包\\"
# 循环下载每张图片
for url in image_urls:
# 获取图片数据
image_data = get_image(url)
if image_data is None: # 如果获取失败,跳过这张
continue
# 从网址中提取文件名(比如从网址中取出"202103302056530751.gif")
file_name = url.split("/")[-1]
# 拼接完整的保存路径(文件夹+文件名)
save_path = save_folder + file_name
# 保存图片
save_image(save_path, image_data)
运行结果
打开D:\表情包文件夹,会看到两张下载好的图片,说明程序成功运行了。
注:最好在文件夹里新建文件
四、常见问题与解决方法
1. 报错 "PermissionError: [Errno 13] Permission denied"
- 原因:保存文件的路径没有权限(比如直接保存到D
盘根目录); - 解决:换一个路径,比如
D:\文件夹名(必须提前创建文件夹)。
2. 中文显示乱码
- 原因:网页编码没有正确识别;
- 解决:加上
response.encoding = response.apparent_encoding。
3. 报错 "requests.exceptions.ConnectionError"
- 原因:网络断开、网址错误,或者网站被墙;
- 解决:检查网络连接,确认网址正确(可以复制网址到浏览器打开试试)。
4. 程序运行后没有结果,或者结果为空
- 原因:可能被网站的反爬机制拦截了;
- 解决:加上
headers参数模拟浏览器。
更多推荐
所有评论(0)