欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

https://imgsa.baidu.com/forum/pic/item/...【贴吧图床】

程序员文章站 2022-05-14 17:44:20
...

参考链接

贴吧图床 - 小记

https://imgsa.baidu.com/forum/pic/item/...【贴吧图床】

目录

1. 这个链接是啥
2. 什么是图床
3. 利用贴吧做图床
4. 编程实现
5. 心得体会

一、这个链接是啥

之前逛B站的时候,看到有人在评论区放图,结果是一个链接,点进去就是一张动态图。
???B站评论区可以发图的么。。。什么鬼
后来,在查找资料的过程中,发现原来这是百度贴吧里的图,因为图片上传至贴吧后,图片保存下来,可以把链接复制到别的地方。
emm… 在某种意义上来说,这个好像挺有用的和挺方便的。
【忘了留链接和截图,不过也不要紧不影响后续的内容。。。】

二、什么是图床

图床 - 【百度百科】

图床一般是指储存图片的服务器,有国内和国外之分。国外的图床由于有空间距离等因素决定访问速度很慢影响图片显示速度。国内也分为单线空间、多线空间和cdn加速三种。

大概的意思就是,图床就是用来存放图片的空间,同时允许外链到其他网站。有的时候自己的服务器负担比较重,利用其它服务器当做图床,缓解自己服务器的压力,等等。
就比如:
写 MarkDown 文章可以引用别的地方的图片,
【我也不是很懂,随便写几句】

三、利用贴吧做图床

之前逛的时候,偶然间看到一篇用贴吧做图床的文章,也想动手分析和实现一下这个过程。
整体思路还是很简单【还是有难度的】,大概就是:利用贴吧的图片上传功能,将图片上传至贴吧的服务器,然后图片就在贴吧上了,就会随之产生一个链接,那个链接就是我们需要的
【我比较喜欢多写写分析过程,善于思考还是很重要的】

  1. 初始的分析
    第一步,就难道我一下了。我根本不知道上传的链接在哪里,这可怎么整啊。贴吧相册?贴吧有相册么,好歹我用贴吧这么多年,我咋完全不知道这玩意呢。在做出尽可能的挣扎之后,只好放弃这个思路。em… 贴子里面好像经常发图,做图床的可能性也大,所以抱着试一试的心态,尝试抓上传图片的接口。
    https://imgsa.baidu.com/forum/pic/item/...【贴吧图床】

  2. 接口抓包
    在点击本地上传之前,记得打开 Fiddler 进行抓包,看看接口链接是啥。
    https://imgsa.baidu.com/forum/pic/item/...【贴吧图床】
    抓包结果如下所示:
    https://imgsa.baidu.com/forum/pic/item/...【贴吧图床】
    提取出链接:
    https://uploadphotos.baidu.com/upload/pic?tbs=a03b8e590a9e94d6015762263880125500_1&fid=398061&save_yun_album=1
    对比:
    https://imgsa.baidu.com/forum/pic/item/...【贴吧图床】
    看来我们的猜想没有问题,这里就可以上传图片,得到我们需要的外链。【这张截图来自参考链接一里的代码】

  3. 图片上传
    基本上,原理方面就是这样【也不知道该说啥,没啥可写,就少写点吧】。接下来的话,我想通过编写程序的方式,模拟提交图片文件,实现贴吧上的图片上传过程,最后拿到需要的链接。

四、编程实现

基于 Python3 编写的代码,代码原理我就不讲了。

import requests


class BaiduTuChuang(object):

    def __init__(self, cookies):
        # 上传用的链接
        self.upload_url = 'http://uploadphotos.baidu.com/upload/pic?tbs=dc00688a479d8002015649947380125500_1&fid=4208767&save_yun_album=1'
        # 拼接用的链接
        self.imgBase_url = 'https://imgsa.baidu.com/forum/pic/item/'
        # 头部
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
                            'Host': 'uploadphotos.baidu.com',
                           'Cookie': cookies}

    def process(self, path):
        # 文件地址处理,以便提取文件名和后缀名
        temp = path.split('\\')[-1]
        filename, suffix = temp.split('.')
        print('filenam: {0} \ntype: {1}'.format(filename, suffix))
        return filename, suffix
    
    def upload(self, path):
        # 上传主程序
        filename, suffix = self.process(path)
        files = {'file': (filename, open(path, 'rb'), 'image/{}'.format(suffix))}
        response = requests.post(self.upload_url, headers=self.headers, files=files)
        data_json = response.json()
        # 可能会报错
        try:
            pic_id_encode = data_json['info']['pic_id_encode']
            print('IMG:\n{0}{1}{2}'.format(self.imgBase_url, pic_id_encode, '.jpg'))
        except Exception as error:
            print(data_json)


if __name__ == '__main__':
    # 填入自己的 cookie
    #【可能要抓包的,抓提交图片时那个链接的cookie值才有用】
    cookies = ''
    # 路径,如 C:\Users\hp\Desktop\test2.gif
    path = r''
    tuChuang = BaiduTuChuang(cookies)
    tuChuang.upload(path)

五、心得体会

还是遇到一些问题的,模拟提交的时候,竟然把参数 Cookie 写成复数 Cookies,导致一直出错,难受死了。还有代码可能有问题,就先这样吧。好事情是,用 requests 模块提交文件总算能够成功了,这是一次不错的收获。当然写这篇博文的主要目的不是做图床,而是明白这个链接到底从哪来和有什么用,下次在看到这个链接就会知道原来是这么回事情。好久没有写代码了,写一写熟练一下自己的技术。
路曼曼其修远兮,路还很长,继续加油吧! ヾ(◍°∇°◍)ノ゙

点我回顶部

 
 
 
 
 
 
 
Fin.

相关标签: 杂项