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实现爬取微博相册所有图片 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P

随机推荐

  • 边缘检测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 主函数的编写 结果 前言 微博有相册功能 那么我们如何批量下载相册中的所有照片呢 提示 以下是本篇文章正文内容 下面案例可供参考 一 分析