半次元获取收藏夹下所有的图片

 

现在已经更新到一个uid即可多线程获取收藏夹下的所有图片。

新的代码有空再发,下面的是旧代码。

-----------------------------------

一个链接,就可以下载收藏夹的所有图片了,也就是“我的喜欢”的所有图片。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a2m5aSn5pWw5o2u55qE5rKQ5rGQ,size_20,color_FFFFFF,t_70,g_se,x_16

半次元的coser们都是那么好看,每次都会忍不住去点赞收藏,时不时还会把这些图片保存下来作为壁纸,但是图片一张一张的下不完,那有没有办法一下子下载呢?

现在我非常的需要一个可以下载所有图片的办法,只要一个链接就可以下载自己喜欢的图片了

话不多说,直接上代码!

一、需要用到的库

import datetime
import requests
import json
import re
import os

二、请求头

一次请求可能不会一下子成功,所以要请求多次,如果大于请求10次,则不再请求

def get_res(url):   #网页请求,当错误过多则跳过此链接
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36',
        #'cookie':'',#如果自己的喜欢设置了只能自己看,那就填写自己的cookie
    }
    count= 0
    while True:
        count+=1
        try:
            res = requests.get(url, headers=headers,timeout = 10)
            res.encoding = 'utf-8'
        except:
            pass
        else:
            if res.status_code == 200:
                return res
            if count>= 10:
                return False

三、获取第一个喜欢页面

第一个页面前35个喜欢的信息在网页源代码中

def first_favor_page(uid): #我的喜欢第一个页面,前35个喜欢
    url = 'https://bcy.net/u/'+uid+'/like'
    res=get_res(url)
    pattern='window.__ssr_data = JSON.parse\("(.*?)"\);\n      window._UID_ ='
    text=re.findall(pattern,res.text)[0].replace('\\"', '"').replace('u002F', '').replace('\\\\', '/')
    item_id=re.findall('"item_id":"(.*?)"',text)
    urls=[]
    for i in range(len(item_id)):
        urls.append('https://bcy.net/item/detail/'+item_id[i]+'?_source_page=profile')
    return urls

四、获取余下的喜欢页面

余下的喜欢页面文件保存在下面的文件之中(一个文件包含35个喜欢的url)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTQyNDUxMzU=,size_20,color_FFFFFF,t_70,g_se,x_16

 

def all_favor_page(url):    #获取我的喜欢所有页面,35个喜欢为一个喜欢页面
    uid=re.findall('uid=(.*?)&ptype=',url)[0]
    try:
        urls=first_favor_page(uid)
        while True:
            print(url)
            res = get_res(url)
            List = res.json()['data']['list']
            item_id_list = []
            since_list = []
            for i in range(len(List)):
                item_id_list.append('https://bcy.net/item/detail/' + List[i]['item_detail']['item_id'] + '?_source_page=profile')
                since_list.append(List[i]['since'])
            urls=urls+item_id_list
            url = 'https://bcy.net/apiv3/user/favor?uid=2448850&ptype=like&mid=2448850&since=' + since_list[-1] + '&size=35'
    except:
        return urls

五、获取图集标签

这段代码可有可无,这是给图片命名用的

def get_label(res):     #获取一个图集的标签
    text1 = re.findall('<div class="tag-group">(.*?)</div>', res.text)[0]
    text2 = re.findall('<span>(.*?)</span></a>', text1)
    label = ' '.join(text2)
    file_pattern='\/:.?"<>|'
    for pat in file_pattern:
         label=label.replace(pat,'')
    return label

六、下载图片

def download(url, path):  # 下载图集链接下的图片
    if not os.path.exists(path):
        os.mkdir(path)
    res = get_res(url)
    t=re.findall('<div class="meta-info mb20"><span>(.*?)</span>',res.text)[0].split(' ')[0]       #图集发布时间
    label=get_label(res)
    try:
        pattern='window.__ssr_data = JSON.parse\("(.*?)"\);\n      window._UID_ ='
        target_data =re.findall(pattern,res.text)[0].replace('\\"', '"').replace('u002F', '').replace('\\\\', '/')
    except:
        pass
    else:
        target_img_data = json.loads(target_data, strict=False)['detail']['post_data']['multi']
        num = len(os.listdir(path))
        i=0
        print("-----开始下载!------")
        for img_data in target_img_data:
            img_url = img_data['original_path']
            if img_url.find('jpg') >= 0:
                img_fomat = '.jpg'
            elif img_url.find('png') >= 0:
                img_fomat = '.png'
            elif img_url.find('gif') >= 0:
                img_fomat = '.gif'
            else:
                img_fomat = '.jpg'
            num += 1
            i+=1
            name = str(datetime.date.today())+'('+str(num) +')'+'['+t+']'+'['+label+']'+ img_fomat
            print("下载进程:{}/{}   文件名:{}    已下载数目:{}    ".format(i,len(target_img_data),name,num),end='')
            print("文件路径:",path)
            img_content = get_res(img_url).content
            with open(path+ "/" + name, 'wb') as f:
                f.write(img_content)
        print("-----下载完成!------")

七、主函数

def main(url, path):
    page_url_list=all_favor_page(url)
    Len=len(page_url_list)
    page_url_list=page_url_list[::-1]
    for i in range(Len):    #单线程,如果觉得下载慢,可以把for循环弄成多线程
        print('我的喜欢页面获取超链接进程:{}/{}'.format(i+1,Len))
        try:
            print(page_url_list[i])
            download(page_url_list[i], path + "//")
        except:
            pass
if __name__ == '__main__':
    #如果我的喜欢设置了只能自己看,就在get_res(url)中填写自己的cookie
    path='D://bcy'     #保存路径,文件夹自己会生成
    url = ''#填写请求网址
    main(url, path)

那么,我们需要获取哪一个链接呢?

点击F12后,鼠标滚轮下拉页面,当刷新出来第一个favor(喜欢的页面文件),将此处的“请求网址”的值填写到主函数的url中。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTQyNDUxMzU=,size_20,color_FFFFFF,t_70,g_se,x_16

点击运行,当所有喜欢的页面文件(一个文件包含35个喜欢的url)获取完,提取出需要的图集url后,然后就可以下载图片了

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值