爬取微博任意搜索关键词的微博数据
本教程将指导你如何通过Python编写一个微博图片爬虫,实现根据关键词和页数批量下载微博图片的功能。
目录
功能概述
- 输入关键词和页数,爬取微博搜索结果中的图片
- 自动将缩略图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) # 设置下载间隔
效果展示:
使用说明
操作步骤
- 替换有效的cookie(需登录微博后获取)
- 运行脚本
- 输入搜索关键词(如:刘亦菲)
- 输入要爬取的页数
- 等待自动下载完成
示例输出
复制
请输入要下载的微博关键词:刘亦菲
请输入要下载的页数: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)}")
其他注意事项
- Cookie有效期通常为1-2天,过期需重新获取
- 建议设置随机延时(如:
time.sleep(random.uniform(0.5, 2))
) - 微博反爬机制可能限制频繁访问
- 高清图路径
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