【Python爬虫实战】一键下载微博高清图片!支持关键词搜索,附完整源码
关键词:Python爬虫、微博图片下载、requests库、正则表达式、反爬策略
一、项目效果演示
二、核心功能
- ✅ 关键词搜索:自定义抓取任意话题图片
- ✅ 自动高清解析:将缩略图转换为1080P大图
- ✅ 智能分页:支持多页连续爬取
- ✅ 反爬对抗:随机延时+请求头伪装
- ✅ 异常处理:自动重试+错误日志记录
三、手把手环境配置
3.1 安装Python库
bash
复制
# 新手建议直接使用Anaconda环境
pip install requests regex
3.2 获取Cookie(关键步骤)
- 浏览器访问微博官网并登录
- 按F12打开开发者工具 → Network → 刷新页面
- 复制任意请求头中的
Cookie值(图示)
四、代码逐行解读(附完整源码)
4.1 完整代码
python
复制
import requests
import re
import time
import random
import os
# ====== 配置区 ======
COOKIE = "替换你的Cookie" # 重要!按上文方法获取
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..."
# ====== 功能函数 ======
def download_weibo_images(keyword, pages=1):
headers = {
"Cookie": COOKIE,
"User-Agent": USER_AGENT,
"Referer": "https://s.weibo.com/"
}
for page in range(1, pages+1):
print(f"正在爬取第 {page}/{pages} 页...")
# 构造搜索URL(注意编码)
search_url = f"https://s.weibo.com/weibo?q={requests.utils.quote(keyword)}&page={page}"
try:
response = requests.get(search_url, headers=headers, timeout=15)
response.raise_for_status()
# 正则匹配所有图片
thumb_urls = re.findall(
r'https?://wx\d\.sinaimg\.cn/(thumb\d+/|mw690/)?([a-zA-Z0-9]+\.(?:jpg|png))',
response.text
)
# 高清图处理
for idx, (_, img_name) in enumerate(thumb_urls):
hd_url = f"https://wx1.sinaimg.cn/large/{img_name}"
# 下载图片
img_data = requests.get(hd_url, headers=headers).content
save_path = f"{save_dir}/{page}_{idx+1}.jpg"
with open(save_path, "wb") as f:
f.write(img_data)
print(f"✅ 已保存:{save_path}")
time.sleep(random.uniform(0.5, 1.5)) # 随机延时防封
except Exception as e:
print(f"❌ 第 {page} 页抓取失败:{str(e)}")
# ====== 主程序 ======
if __name__ == "__main__":
keyword = input("请输入搜索关键词(示例:春日穿搭):")
pages = int(input("请输入爬取页数(1-50):"))
download_weibo_images(keyword, pages)
print("🎉 任务完成!请查看保存目录")
五、六大优化亮点
5.1 URL智能编码
python
复制
requests.utils.quote(keyword) # 自动处理中文编码问题
5.2 高清图自动转换
python
复制
hd_url = f"https://wx1.sinaimg.cn/large/{img_name}" # 直接访问原图
5.3 三级容错机制
python
复制
try:
# 网络请求
except requests.exceptions.Timeout:
print("请求超时,正在重试...")
except requests.exceptions.HTTPError as e:
print(f"HTTP错误:{e.response.status_code}")
六、常见问题解答
Q1:为什么获取不到Cookie?
- 确保登录后保持开发者工具处于打开状态
- 复制整个Cookie字符串(包括
SUB=...等参数)
Q2:出现403 Forbidden错误?
python
复制
time.sleep(random.uniform(1, 3)) # 增大延时
USER_AGENT = "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X)..." # 切换移动端UA
七、进阶扩展方向
- 添加代理IP池(应对高频封禁)
- 结合Selenium模拟滚动加载
- 自动打包下载图片为ZIP
- 添加GUI可视化界面
温馨提示:请合理控制爬取频率,遵守微博Robots协议,本代码仅用于学习交流!
觉得有帮助?点赞⭐收藏✨关注我,获取更多Python爬虫干货! 需要完整源码?an1544167879 或评论区留言“微博爬虫”自动获取下载链接~