鱼C论坛

 找回密码
 立即注册
查看: 1749|回复: 5

[技术交流] Python 爬取鱼C表情包 (1)

[复制链接]
发表于 2020-3-26 16:02:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qiuyouzhi 于 2020-3-26 16:04 编辑

Python 爬取表情包 (1)



写在前面的话

1,这段代码目前还有许多的缺陷(可以爬取大部分,

不知道能不能爬取全部的,没有试过),

各位大佬可以顺便帮忙改一改

2,抱歉啦,服务器君

用到的模块:

urllib:  用于保存图片和调试错误。

os:  用于确定保存图片的位置。。

思路:

先看看网页,随便打开一个鱼C的网页(可以回复),

然后检查一下网页,调到Network,刷新:

https://imgchr.com/i/GSfawD

随便翻一翻,发现了一堆开头

是aru的png图片,直接点开看Preview:

https://imgchr.com/i/GSf2m8

这就是我们想要的(本人喜欢啊撸)!

开始写代码,先导入模块,

并做一些基本的工作:
import urllib.request
from urllib.error import HTTPError
import os
os.mkdir(r"C:\Users\username\Desktop\Image")
os.chdir(r"C:\Users\username\Desktop\Image") # username换成自己的

看看图片所在的url:

https://imgchr.com/i/GS4Q2R

可以发现,url就是https://fishc.com.cn/static/image/smiley/ARU/

后面加上图片名字,可以写出代码:
def open_url(url):
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
    res = urllib.request.urlopen(url)
    return res

def make_url(count, count2):
    count = str(count)      
    if len(count) > 1:       # 因为URL的第二个可变部分最多不会超过3位,所以就这么
                                        瞎写了一个,判断自己配出来的URL是否符合要求(但这段代码还是做不到啊。。)
        if len(count) > 2:   # 这一段算法还有问题,继续修改。。。
            pass
        else:
            count = '0' + count[1:]
    else:
        count = "00" + count
    url = 'https://fishc.com.cn/static/image/smiley/ARU/aru-1x-%d_%s.png' % (count2, count)
    print(url)
    return url

make_url就是用于构造url的,本人初学,

写的一团糟。。。

btw: 这段代码我可谓死伤无数脑细胞,

别看不长,第一代可以长的要死,我实在

看不下去,就换了个思路改了改。

最难的部分已经完成啦!剩下的就是

下载图片并保存了!
def get_Image(res, count,count2):
    with open(f"{count}({count2}).png", 'wb') as f:
        f.write(res.read())
        

def main(count):
    url = make_url(count, count2)
    if url == None:
        return 0
    res = open_url(url)
    get_Image(res, count,count2)
    
for j in range(3):
    for i in range(200):
        try:
            a = main(i)
            if a == 0:
                continue
        except HTTPError:
           pass
    count2 += 1

简单说一下思路:

可以看下Network,会发现有

1_005, 2_069 这样的URL,

我一开始没发现,中了很大的坑。

于是后面就加上了count2,又套了一次循环才成、

(可以直接改成j,但是懒得改了。。。)


差不多就这样了,附上最终代码:
import urllib.request
from urllib.error import HTTPError
import os
os.mkdir(r"C:\Users\rzzl\Desktop\Image")
os.chdir(r"C:\Users\rzzl\Desktop\Image")

count2 = 1

def open_url(url):
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
    res = urllib.request.urlopen(url)
    return res

def make_url(count, count2):
    count = str(count)      
    if len(count) > 1:
        if len(count) > 2:   # 这一段算法还有问题,继续修改。。。
            pass
        else:
            count = '0' + count[1:]
    else:
        count = "00" + count
    url = 'https://fishc.com.cn/static/image/smiley/ARU/aru-1x-%d_%s.png' % (count2, count)
    print(url)
    return url
    

def get_Image(res, count,count2):
    with open(f"{count}({count2}).png", 'wb') as f:
        f.write(res.read())
        

def main(count):
    url = make_url(count, count2)
    if url == None:
        return 0
    res = open_url(url)
    get_Image(res, count,count2)
    
for j in range(3):
    for i in range(200):
        try:
            a = main(i)
            if a == 0:
                continue
        except HTTPError:
           pass
    count2 += 1

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 16:03:32 | 显示全部楼层
P.S:电脑太渣,图片我放到图床上去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 16:22:51 | 显示全部楼层
哦哦,不错嘛!

评分

参与人数 1荣誉 +1 收起 理由
qiuyouzhi + 1 回复要审核,只能这样说了 代码还有一点.

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-26 16:55:54 | 显示全部楼层
qiuyouzhi 发表于 2020-3-26 16:03
P.S:电脑太渣,图片我放到图床上去了

有bug,只爬了7张图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-2 14:01:23 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-4-3 17:50 编辑

修改了一下:
import urllib.request
from urllib.error import HTTPError
import os
try:
    os.mkdir(r"C:\Users\rzzl\Desktop\Image")
except OSError:
    pass
os.chdir(r"C:\Users\rzzl\Desktop\Image")

count2 = 1

def open_url(url):
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
    res = urllib.request.urlopen(url)
    return res

def make_url(count, count2):
    count = str(count)      
    if len(count) > 1:
        if len(count) > 2:   # 这一段算法还有问题,继续修改。。。
            pass
        else:
            count = '0' + count[:1] + count[1:]
    else:
        count = "00" + count
    url = 'https://fishc.com.cn/static/image/smiley/ARU/aru-1x-%d_%s.png' % (count2, count)
    print(url)
    return url
    

def get_Image(res, count,count2):
    with open(f"{count}({count2}).png", 'wb') as f:
        f.write(res.read())
        

def main(count):
    url = make_url(count, count2)
    if url == None:
        return 0
    res = open_url(url)
    get_Image(res, count,count2)
    
for j in range(3):
    for i in range(300):
        try:
            a = main(i)
            if a == 0:
                continue
        except HTTPError:
           pass
    count2 += 1
这样就不需要手动删除已存在的文件夹了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-7 16:27:15 | 显示全部楼层
芜湖,我最近也写了几个爬鱼C上东西 、的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 22:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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