使用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、不要滥用,影响服务器正常使用

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

472

被折叠的 条评论
为什么被折叠?



