使用aria2批量下载微博相册

使用aria2批量下载微博相册

如题,就是一个简单的微博相册下载器,随便写写,欢迎大家一起交流,代码如下

#-------引入模块-------#
import requests as res
import time
import pyaria2
import re
from tqdm import tqdm
import os

#-------常数区-------#
#aria2c.exe --enable-rpc --rpc-allow-origin-all  win下可以用这条来开启 aria2rpc
rpc=pyaria2.Aria2RPC()#设置rpc,如aria2设置token,则需rpc=pyaria2.Aria2RPC(url="http://localhost:6800/rpc"这里也可以进行远程下载,填写你的远程rpc地址, token=你的token)
cookie=open('cookie.txt','r').read()#将新鲜的cookie粘入
h={

   'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67' ,
   'content-type': 'application/x-www-form-urlencoded' ,
   'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' ,
   'cookie': cookie ,
}

#-------函数区-------#
def download(path,ul):#aria2下载
    op={
        "out":path,
    }
    rpc.addUri([ul],op)

def getlist(uname,uid):#获取相册列表
    ts=str(int(time.time()*1000))
    url='https://photo.weibo.com/albums/get_all?uid='+uid+'&page=1&count=100&__rnd='+ts
    s=res.get(url,headers=h).json()['data']['album_list']
    for i in s:
        album_id=str(i['album_id'])
        alname=str(i['caption'])
        type=str(i['type'])
        page=1
        lex=100
        dic=[]
        print('开始下载', alname)
        while lex==100:
            xx=getpiclist(album_id,type,uid,page)
            dic+=xx
            lex=len(xx)
            page+=1
        bar=tqdm(dic)#花活,没什么用的进度条
        for j in bar:
            bar.set_description("已下载 %s" % str(dic.index(j)+1) )
            ul = 'https://wx4.sinaimg.cn/large/' + j#weibo大图地址规则
            download('weibo/'+uname+'/'+alname+'/'+j,ul)
            #调用aria2下载图片,将图片地址发到jsonrpc,默认使用系统文件名,如想设置,可以额外修改

        print(alname,'已加入aria2')

def getpiclist(album_id,type,uid,page):#获取图片列表
    ts = str(int(time.time() * 1000))
    url='https://photo.weibo.com/photos/get_all?uid='+uid+'&album_id='+album_id+'&count=100&page='+str(page)+'&type='+type+'&__rnd='+ts
    #除头像相册外,其他相册最多一次请求100张照片
    s = res.get(url, headers=h).json()['data']['photo_list']
    time.sleep(1)
    return [i['pic_name'] for i in s]

def getuname(url):#获取用户名和用户id
    s=res.get(url,headers=h).text

    uname=re.findall("CONFIG\['onick'\]='([^']*)'",s)[0]
    uid=re.findall("CONFIG\['oid'\]='([^']*)'; ",s)[0]
    return uname,uid

if __name__ == '__main__':
    print('''
 _       __       _  __              ____                          __                   __           
| |     / /___   (_)/ /_   ____     / __ \ ____  _      __ ____   / /____   ____ _ ____/ /___   _____
| | /| / // _ \ / // __ \ / __ \   / / / // __ \| | /| / // __ \ / // __ \ / __ `// __  // _ \ / ___/
| |/ |/ //  __// // /_/ // /_/ /  / /_/ // /_/ /| |/ |/ // / / // // /_/ // /_/ // /_/ //  __// /    
|__/|__/ \___//_//_.___/ \____/  /_____/ \____/ |__/|__//_/ /_//_/ \____/ \__,_/ \__,_/ \___//_/     

\r\n\r\n                                                                                      by:Laowei''')
    #整点花活
    ur=input('微博主页地址')
    uname,uid=getuname(ur)
    getlist(uname,uid)

PS:

1、aria2 可到官网下载最新版本,全平台支持,可以配合webui一起使用

2、aria2一定要开启rpc,否则只能用命令
aria2c -u https://xxx.xxx.xxx/xxx.jpg

3、字符画可以到这个网站
http://patorjk.com/software/taag/#p=display&h=1&f=Chiseled&t=Type%20Something%20去生成进行替换

4、pyaria2这个包方便使用aria2 jsonrpc,不使用的话也可以直接用jsonrpc方式发送请求也可以

5、不要滥用,影响服务器正常使用

在这里插入图片描述

这是老魏的公众号,会不定期发一些自己的爬虫和心得,欢迎大家来玩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值