python实现爬取微博相册所有图片

2023-11-05

微博相册的批量爬取


前言

微博有相册功能,那么我们如何批量下载相册中的所有照片呢?


提示:以下是本篇文章正文内容,下面案例可供参考

一、分析实现思路

因为微博相册也是前后端分离,所以我们先去抓包对应的json数据
在这里插入图片描述
这里以李荣浩的相册为例,一共有25页:
在这里插入图片描述
分析得出实际的链接应该为:‘https://wx4.sinaimg.cn/large/’ + pic_name
再来看看链接循环爬取的分析
在这里插入图片描述
这里只需要更改page的值即可实现循环爬取

二、编写代码

1.引入库

代码如下:

from fake_useragent import UserAgent # 伪装机型
from threading import Thread # 多进程
from queue import Queue # 队列
import requests
import random

headers = {
	# cookie 每天会变化,需要即使更换
    'cookie': 'SINAGLOBAL=74744724261.95033.1605948585466; wvr=6; '
              'SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9Whrq6C5pCwQBNf5XnQhDpfE5JpX5KMhUgL.Fo'
              '-cehB7eoqpSKM2dJLoIEBLxKBLBonL12BLxKqL1KnL12-LxKnLBKML1h.LxKMLBKqLB.zt; ALF=1641197487; '
              'SSOLoginState=1609661488; '
              'SCF=AqFdnOicaqrQ3UjYRBY-C8Kp3PwjrkfR1lPLA0W8mjbwb9rIU1MBf0l9kWk3ahdAXFldqtvqcZ7UW_ehPXfM1JE.; '
              'SUB=_2A25y9QxgDeRhGeNI61YR8ijNzjuIHXVRg3qorDV8PUNbmtAKLVTukW9NSH08UxX8Md1T1NOxjdEP88XVg1aJmi7t; '
              '_s_tentry=login.sina.com.cn; Apache=9994350802777.143.1609661492706; '
              'ULV=1609661492740:9:6:2:9994350802777.143.1609661492706:1609657348149; UOR=,,www.baidu.com; '
              'webim_unReadCount=%7B%22time%22%3A1609666074015%2C%22dm_pub_total%22%3A0%2C%22chat_group_client%22%3A0'
              '%2C%22chat_group_notice%22%3A0%2C%22allcountNum%22%3A3%2C%22msgbox%22%3A0%7D; '
              'WBStorage=8daec78e6a891122|undefined',
    # 从哪里来
    'referer': 'https://photo.weibo.com/6816603335/talbum/index',
    # 伪装头
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66 ',

}
# 下载时图片的伪装头
fake = {
    'User-Agent': UserAgent().random
}
# ip代理池
proxy_pool = [{'HTTP': '183.166.70.110:9999'}, {'HTTP': '58.22.177.215:9999'}, {'HTTP': '175.44.109.28:9999'},
              {'HTTP': '175.42.128.211:9999'}, {'HTTP': '113.121.76.254:9999'}, {'HTTP': '175.42.122.166:9999'},
              {'HTTP': '175.42.122.233:9999'}, {'HTTP': '113.121.42.214:9999'}, {'HTTP': '113.195.152.127:9999'},
              {'HTTP': '175.42.129.78:9999'}, {'HTTP': '171.35.213.172:9999'}, {'HTTP': '113.121.37.163:9999'}]
# 访问json数据的url
url = 'https://photo.weibo.com/photos/get_all'

2.多进程的编写

代码如下:

class SpiderImg(Thread):
	# 初始化
    def __init__(self, d):
        Thread.__init__(self)
        self.data = d
	# 重写run方法
    def run(self):
    	# 当队列不为空的时候下载对应的url下的图片
        while not self.data.empty():
        	# 取队列
            a = self.data.get()
            # 获得id和url数据
            i_id = list(a.keys())[0]
            i_url = list(a.values())[0]
            # 访问链接取得数据
            img = requests.get(url=i_url, headers=fake, proxies=random.choice(proxy_pool)).content
            # 将文件写入指定路径下的文件夹
            with open('E:/SpiderImg/李荣浩/{}.jpg'.format(i_id), 'wb') as t:
                t.write(img)
                print(i_id + '.jpg' + ' ' * 4 + '下载完毕' + '.' * 4)

为了开启多进程爬取图片


3.主函数的编写

代码如下:

if __name__ == '__main__':
	# 初始化队列
    data_queue = Queue()
    # 循环
    for i in range(1, 26):
        params = {
            'uid': '1739046981',
            'album_id': '3581934839144367',
            'count': '30',
            'page': i,
            'type': '3',
            '__rnd': '1609667183074'
        }
        print('正在爬取第{}页'.format(i) + '.' * 4)
        response = requests.get(url=url, params=params, headers=headers).json()
		# 解析数据
        photo_list = response.get('data').get('photo_list')
        for photo in photo_list:
        	# 取得其中的pic_name 和 pic_name 
            pic_name = photo.get('pic_name')
            pic_name = photo.get('photo_id')
            photo_url = 'https://wx4.sinaimg.cn/large/' + pic_name
            # 添加到队列中
            data_queue.put({photo_id: photo_url})
	# 开启多进程,根据队列中存放的url数据,下载图片
    for w in range(64):
        spider = SpiderImg(data_queue)
        spider.start()

结果

程序运行结果:
在这里插入图片描述
注:案例仅供学习

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现爬取微博相册所有图片 的相关文章

随机推荐

  • 边缘检测Sobel、laplacian、canny算子

    1 图像边缘检测 图像边缘检测对于分析图像中的内容 实现图像中物体的分割 定位等具有重要的作用 边缘检测大大减少了源图像的数据量 剔除了与目标不相干的信息 保留了图像重要的结构属性 常用的图像边缘检测方法分为以下两种 一阶导数的边缘算子 通
  • Linux PWM 驱动实验

    一 PWM 驱动简析 1 设备树下的 PWM 控制器节点 I MX6ULL 有 8 路 PWM 输出 因此对应 8 个 PWM 控制器 所有在设备树下就有 8 个PWM 控制器节点 这 8 路 PWM 都属于 I MX6ULL 的 AIPS
  • [Codeforces] combinatorics (R1600) Part.7

    Codeforces combinatorics R1600 Part 7 题单 https codeforces com problemset tags combinatorics 1201 1600 1534C Little Alawn
  • 用Python爬虫技术怎么挣点小钱,这四种方法可行

    提醒 抓取的数据如果要商业化 要小心知识产权问题噢 还要提醒一点 抓取和处理这些数据的代价要小于人工处理的代价 使用爬虫代替人工才有价值 我利用Python爬虫技术赚点小钱方式 在正式聊Python爬虫技术之前 先来说说挣钱的事 说说作为一
  • react组件的render方法

    一个组件类必须要实现一个 render 方法 这个 render 方法必须要返回一个 JSX 元素 必须要用一个外层的 JSX 元素把所有内容包裹起来 返回并列多个 JSX 元素是不合法的 错误的写法 render return div 第
  • 计算机显示丢失d3dcompiler,无法启动此程序提示缺少d3dcompiler文件怎么解决

    有用户说他在打开某个程序时 系统却提示说无法启动此程序提示缺少d3dcompiler文件的情况 这可能是在系统更新时出现错误导致的 那么无法启动此程序提示缺少d3dcompiler文件怎么解决呢 很简单安装一个更新包即可解决 下面小编给大家
  • [培训-无线通信基础-7]:信道均衡器(信道估计、信道均衡)

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 118832368 目录 引言
  • FFT算法(Java实现)

    FFT导论 转载自FFT导论 FFT是离散傅立叶变换的快速算法 可以将一个信号变换到频域 有些信号在时域上是很难看出什么特征的 但是如果变换到频域之后 就很容易看出特征了 这就是很多信号分析采用FFT变换的原因 另外 FFT可以将一个信号的
  • 通过Java操作Kafka

    通过Java操作Kafka 前置知识 https editor csdn net md articleId 125883056 创建maven项目 导入kafka客户端依赖
  • C#生成二进制文件

    文章目录 用C 将文本MAC地址生成二进制文件 使用C 将字符串生成二进制文件 为什么用C 来开发这个简单的上位机 用C 将文本MAC地址生成二进制文件 using System using System Collections Gener
  • wangEdit大致使用

    1 先导入 两种方式任选其一 yarn add wangeditor editor for vue next npm install wangeditor editor for vue next save 2 创建富文本框组件 以下是vue
  • 51单片机学习笔记(五) -独立按键&&外部中断

    文章目录 一 按键的工作原理 1 原理图 2 按键的工作原理 二 使用轮询法处理按键 1 通过按键来点亮LED 2 键值检测与显示 3 按键消抖 4 完整的按键检测 四 使用中断检测按键 1 功能要求 2 外部中断INT0和INT1 3 代
  • oracle约束+disable与enable约束+为表添加约束+修改表约束的状态+primary key+not null+unique+foreign key+外键删除数据,可以使用的级联操作...

    oracle约束 分类 表级约束 应用于表 对表的多个列起作用 或者说定义所有列后 再定义约束 not null 约束只能在列级上 列级约束 应用于表的一列 只对该列起作用 或者说定义列的同时定义约束 disable与enable约束 控制
  • Java中队列的实现(2)-使用单向链表以及实现

    队列 Queue 是另一种被限制过的线性表 它是固定一端来插入数据元素 另一端只删除元素 也就是说队列中的元素移动是固定的 就像超市收银台一样 一边是进的 一边是出的 而且是先进入的首先获得服务的 队列是一个特殊的线性表 它只允许在表的前端
  • 国产数据库排行

    目录 一 理论 1 国产数据库排行 2 数据 一 理论 1 国产数据库排行 1 墨天轮榜单 墨天轮国产数据库流行度排行于2019年6月推出 通过近50个维度的数据来考察近300个国产数据库的流行度排行 每月1日更新排行数据 用于体现国产数据
  • vue踩坑记录—elementui样式引入失败

    出现的问题 F12没有任何报错 elementui可以引入组件 但是组件的样式不显示 首先检查项目的插件和依赖是否安装 命令行运行vue ui 在可视化界面里可以安装 插件 vue cli plugin element 依赖 开发依赖 el
  • java 附近的人

    传送门 思路清晰 详述了坐标取附近的人的功能
  • 论文参考文献插入方法(一)

    本文使用的是word2016 word2010及以上操作方法应该相同 第一步 参考文献编号 首先在 参考文献 字后面新起一行 从 开始 里面选择 插入编号 选择圆圈中的那种编号格式 参考文献的编号格式 这是就会自动出现编号 1 插入文献后回
  • Python爬虫副业真的可行吗?能赚多少?

    首先回答你 python爬虫能当副业 副业的方式比较多 等下我会讲几种 到哪个层次能接单 主要看你是接什么样的单 爬一些资料 视频这种简单的学一两个月就没什么问题 复杂的那就需要系统的学习 爬虫原理 html相关知识 urllib urll
  • python实现爬取微博相册所有图片

    微博相册的批量爬取 文章目录 前言 一 分析实现思路 二 编写代码 1 引入库 2 多进程的编写 3 主函数的编写 结果 前言 微博有相册功能 那么我们如何批量下载相册中的所有照片呢 提示 以下是本篇文章正文内容 下面案例可供参考 一 分析