爬取微博任意搜索关键词的微博数据

49 阅读3分钟

爬取微博任意搜索关键词的微博数据

本教程将指导你如何通过Python编写一个微博图片爬虫,实现根据关键词和页数批量下载微博图片的功能。


目录

  1. 功能概述
  2. 环境准备
  3. 代码解析
  4. 使用说明
  5. 注意事项

功能概述

  • 输入关键词和页数,爬取微博搜索结果中的图片
  • 自动将缩略图URL转换为高清图URL
  • 按顺序保存图片到本地文件夹
  • 设置请求间隔防止被封禁

环境准备

Python库安装

pip install requests

文件夹创建

在代码同级目录下创建 image 文件夹用于存储图片


代码解析

1. 导入库

python

复制

import requests
import time
import re

2. 请求头设置

python

复制

headers = {
    "referer": "https://s.weibo.com/",
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed',
    'cookie': "替换为你的实际cookie",  # 需从浏览器开发者工具获取
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...'  # 保持最新浏览器标识
}

3. 用户输入处理

python

复制

shou_suo = input("请输入要下载的微博关键词:")
page = input("请输入要下载的页数:")

4. 多页爬取逻辑

python

复制

for i in range(int(page)):
    page = i + 1
    response = requests.get(f"https://s.weibo.com/weibo?q={shou_suo}page={page}", headers=headers)

5. 正则匹配图片URL

python

复制

pattern = r'https?:\/\/wx\d\.sinaimg\.cn\/\w+\/\w+\.(?:jpg|png)'
urls = re.findall(pattern, response.text)

6. URL替换逻辑(关键)

python

复制

new_url = re.sub(r'/thumb150/', '/mw690/', url)  # 将缩略图路径替换为高清图路径

7. 图片下载与保存

python

复制

resp = requests.get(new_url ,headers=headers)
with open(f"image/{name}.jpg", "wb") as f:
    f.write(resp.content)
time.sleep(1)  # 设置下载间隔

1.png

效果展示:

使用说明

操作步骤

  1. 替换有效的cookie(需登录微博后获取)
  2. 运行脚本
  3. 输入搜索关键词(如:刘亦菲)
  4. 输入要爬取的页数
  5. 等待自动下载完成

示例输出

复制

请输入要下载的微博关键词:刘亦菲
请输入要下载的页数:2
['https://wx1.sinaimg.cn/thumb150/008DIKiOly1hzejwvue1ij30u016tqay.jpg', ...]
1.jpg下载完成
2.jpg下载完成
...

注意事项

正则表达式优化

当前正则可能漏掉部分格式,建议使用更精确的匹配:

python

复制

pattern = r'https?://wx\d\.sinaimg\.cn/(?:thumb\d+/|mw690/)?\w+\.(?:jpg|png)'

异常处理建议

python

复制

try:
    resp = requests.get(new_url, timeout=10)
    resp.raise_for_status()
except Exception as e:
    print(f"下载失败:{new_url},错误:{str(e)}")

其他注意事项

  1. Cookie有效期通常为1-2天,过期需重新获取
  2. 建议设置随机延时(如:time.sleep(random.uniform(0.5, 2))
  3. 微博反爬机制可能限制频繁访问
  4. 高清图路径mw690可替换为large获取不同尺寸图片

扩展应用

支持更多图片格式

修改正则表达式:

python

复制

pattern = r'https?://wx\d\.sinaimg\.cn/\w+/\w+\.(?:jpg|jpeg|png|gif|webp)'

自动创建日期文件夹

python

复制

from datetime import datetime
folder = datetime.now().strftime("%Y%m%d")
os.makedirs(f"image/{folder}", exist_ok=True)

提示:请合理控制爬取频率,遵守网站robots协议

完整代码请联系:an1544167879