吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3418|回复: 40
收起左侧

[Python 原创] 知乎图片去水印批量下载

  [复制链接]
guyinqian 发表于 2024-2-12 22:08

知乎图片去水印批量下载

看了这个帖子:知乎图片去水印下载
https://www.52pojie.cn/thread-1857439-1-1.html
(出处: 吾爱破解论坛)

原理:F12看了下代码,定位到data-original-token中的数据,用它替换掉其它图片的文件名,然后显示出了原图。

代码如下:



[Python] 纯文本查看 复制代码
#!/usr/bin/env python
# _*_ coding: utf-8 _*_

import os
import re
import time
import warnings
import requests

warnings.filterwarnings("ignore")

session = requests.session()  # 对全局进行会话实例化

default_headers = {
    'authority': 'www.zhihu.com',
    'pragma': 'no-cache',
    'cache-control': 'no-cache',
    'sec-ch-ua': '"Chromium";v="21", " Not;A Brand";v="99"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-user': '?1',
    'sec-fetch-dest': 'document',
    'referer': 'https://www.zhihu.com/',
    'accept-language': 'zh-CN,zh;q=0.9',
}



def get_resp(method, url, headers=default_headers, timeout=5, **kwargs):
    for i in range(5):  # 最多重试5次
        try:
            response = session.request(method=method, url=url, headers=headers, timeout=timeout, **kwargs)
            if response.status_code == 200:
                return response.text
            else:
                if i == 4:
                    print('【致命错误】接口状态码' + str(response.status_code) + '异常:' + url)
                else:
                    time.sleep(1)
        except:
            if i == 4:
                print('【致命错误】接口连接异常:' + url)
            else:
                time.sleep(1)
    return None

def downloadFile(fileUrl, folderName, fileSaveName):
    folderName = rename(folderName)
    fileSaveName = rename(fileSaveName)
    if not os.path.exists(folderName):
        os.mkdir(folderName)
    for i in range(5):  # 最多重试5次
        try:
            resp1 = session.get(url=fileUrl,headers=default_headers)
            with open(folderName + "/" + fileSaveName, 'wb') as f:
                f.write(resp1.content)
                print(fileSaveName)
            return
        except:
            if i == 4:
                print('【致命错误】文件下载异常:' + fileUrl)
            else:
                time.sleep(1)


def fixname(fileName):
    pattern = r'[\\/:*?"<>|\r\n]+'  # 过滤Windows文件名中的非法字符
    fileName = re.sub(pattern, "_", fileName)
    return fileName

def rename(fileName):
    fileName = re.sub(r'[\\]+', "\", fileName)
    fileName = re.sub(r'[/]+', "/", fileName)
    fileName = re.sub(r'[:]+', ":", fileName)
    fileName = re.sub(r'[*]+', "*", fileName)
    fileName = re.sub(r'[?]+', "?", fileName)
    fileName = re.sub(r'["]+', """, fileName)
    fileName = re.sub(r'[<]+', "<", fileName)
    fileName = re.sub(r'[>]+', ">", fileName)
    fileName = re.sub(r'[|]+', "|", fileName)
    fileName = re.sub(r'[\r\n]+', "_", fileName)
    return fileName


def main():
    while 1 == 1:
        urlkey = str(input("请输入知乎链接:"))
        if urlkey != '':
            resp = get_resp('post', urlkey)
            list = re.findall(r'data-original-token="(.*?)"', resp)
            for i in list:
                url = f'https://pic2.zhimg.com/{i}.png'
                downloadFile(url, '图片', f'{i}.png')


if __name__ == '__main__':
    main()

免费评分

参与人数 9吾爱币 +13 热心值 +9 收起 理由
scship + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
云之从 + 1 谢谢@Thanks!
yingruan + 1 + 1 热心回复!
xlln + 1 + 1 我很赞同!
Jackknife8451 + 1 我很赞同!
growing88 + 1 + 1 谢谢@Thanks!
为之奈何? + 1 + 1 我很赞同!
T4DNA + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

仙圣 发表于 2024-7-18 04:37
[JavaScript] 纯文本查看 复制代码
document.querySelectorAll('img[data-original][data-original-token][data-lazy-status]:not([data-original-xiu]):not(.comment_sticker):not(.Avatar)').forEach(function(one){one.src = 'https://' + one.dataset.original.split('/')[2] + '/' + one.dataset.originalToken + '.webp'; one.dataset.originalXiu = 'true';});


可以用这条JS代码,直接就是无水印高清原图浏览

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
guyinqian + 3 + 1 我很赞同!

查看全部评分

玩转安卓 发表于 2024-2-12 22:37
牧尘主宰 发表于 2024-2-12 22:53
1580501717 发表于 2024-2-13 00:50
收藏了,感谢
Corgibro 发表于 2024-2-13 02:36
这个可太有用了,不用再自己慢慢修了,况且还修不好图
wecanfly9292 发表于 2024-2-13 06:14
可以下载无水印图片了
czp13 发表于 2024-2-13 08:22
收藏备用
ltgb 发表于 2024-2-13 08:33
就喜欢无水印
sai609 发表于 2024-2-13 08:50
print效果呢
bdxw0611 发表于 2024-2-13 09:34
收藏学习下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表