【Python爬虫实战】一键下载微博高清图片!支持关键词搜索,附完整源码

315 阅读3分钟

【Python爬虫实战】一键下载微博高清图片!支持关键词搜索,附完整源码

关键词:Python爬虫、微博图片下载、requests库、正则表达式、反爬策略


一、项目效果演示

1.png


二、核心功能

  • 关键词搜索:自定义抓取任意话题图片
  • 自动高清解析:将缩略图转换为1080P大图
  • 智能分页:支持多页连续爬取
  • 反爬对抗:随机延时+请求头伪装
  • 异常处理:自动重试+错误日志记录

三、手把手环境配置

3.1 安装Python库

bash

复制

# 新手建议直接使用Anaconda环境
pip install requests regex

3.2 获取Cookie(关键步骤)

  1. 浏览器访问微博官网并登录
  2. 按F12打开开发者工具 → Network → 刷新页面
  3. 复制任意请求头中的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 或评论区留言“微博爬虫”自动获取下载链接~