微博相册的批量爬取

文章目录

  • 前言
  • 一、分析实现思路
  • 二、编写代码
    • 1.引入库
    • 2.多进程的编写
    • 3.主函数的编写
  • 结果

前言

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


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

一、分析实现思路

因为微博相册也是前后端分离,所以我们先去抓包对应的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 randomheaders = {# 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()

结果

程序运行结果:

注:案例仅供学习

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

  1. php抓取微博评论,python爬虫爬取微博评论案例详解

    前几天,杨超越编程大赛火了,大家都在报名参加,而我也是其中的一员. 在我们的项目中,我负责的是数据爬取这块,我主要是把对于杨超越 的每一条评论的相关信息. 数据格式:{"name" ...

  2. 用python爬虫爬取微博信息

    用python爬虫爬取微博信息 话不多说,直接上代码! import requests from bs4 import BeautifulSoup from urllib import parse i ...

  3. python+selenium 爬取微博(网页版)并解决账号密码登录、短信验证

    使用python+selenium 爬取微博 前言 为什么爬网页版微博 为什么使用selenium 怎么模拟微博登录 一.事前准备 二.Selenium安装 关于selenium 安装步骤 三.sel ...

  4. python爬取图解_20行PYTHON代码爬取微博高清大图,小白练手绝佳案例

    0. 前戏说明 环境说明 python3版本 所需库:Beautifulsoup .re .requests 知识点:正则表达式.基本网页请求与解析.文件写入 适用人群:小白 最终目标:20行代码爬取 ...

  5. c#使用正则表达式获取TR中的多个TD_使用python+BeautifulSoup爬取微博热搜榜

    本文将介绍基于Python使用BeautifulSoup爬取微博热搜榜的实现过程 1.首先导入需要使用的库 from bs4 import BeautifulSoup from urllib.requ ...

  6. python爬虫-爬取微博转评赞data信息

    利用python简单爬取新浪微博(转发/评论/点赞/blog文本)信息 import requests import json from jsonpath import jsonpath import ...

  7. Python爬虫爬取微博评论案例详解

    文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 前几天,杨超越编程大赛火了,大家都在报名参加,而我也是其中的一员. 在我们的项目中 ...

  8. Python Ajax爬取微博个人博客数据

    文章目录 利用request.pyquery.xlwings等库抓取微博个人博客数据. (1)抓取[目标网址](https://m.weibo.cn/u/2830678474) (2)用 Chrome ...

  9. Python爬虫爬取微博热搜保存为 Markdown 文件

    微博热搜榜python爬虫,仅供学习交流 源码及注释: # -*- coding=UTF-8 -*- #!usr/bin/env pythonimport os import time import ...

最新文章

  1. java反序列化漏洞的一些gadget
  2. Spring Ioc源码分析 之 Bean的加载(7):初始化
  3. 【简便解法】1090 危险品装箱 (25分)_33行代码AC
  4. Android之网络编程
  5. HDU 1204 基础DP 非连续字段的最大和
  6. eclipse properties 中文显示编码_JMeter点道为止系列(1)JMeter配置文件jmeter.properties常用配置项...
  7. 计算机视觉CV:图像处理面试题
  8. 通信中的“交织”技术
  9. KISS保持简单:纪念丹尼斯·里奇
  10. 实现注册功能添加邮箱激活验证
  11. 转:深网 | 中国手机往事:因为雷军、罗永浩们,中国才告别山寨机
  12. wind 10 安装node环境
  13. 敲开bp神经网络之门(二,mfcc中使用,c#)
  14. Java转Go语言 -12
  15. idea突然打不开了
  16. 各国网络标识码表nbsp;MCC MNC表
  17. 只拿死工资会杀死一个人的人生
  18. tensorflow-读数据(1)
  19. Nginx-初识Nginx-第二天
  20. 对于https ssl中的pem文件和key 文件的理解

热门文章

  1. php http500错误_如何解决php http500错误问题
  2. 解决spyder图片弹出时显示空白
  3. rust怎么造双层_腐蚀rust双层防炸地基教学 rust伪分离图文教学
  4. 能否将上述几点方法举例并进行内容润色?
  5. 《惢客创业日记》2018.10.26(周五) 健康=小米MIX3
  6. Couple GAN论文笔记
  7. 最新iBATIS的代码发生器Ibator插件安装及使用
  8. Discuz! 6.1 language package/语言包 : ug 维吾尔语
  9. 倩女幽魂7月20日服务器维护,7月20日服务器例行维护公告(已完成)
  10. 开放共生,解密国内最大的开源联盟链生态圈