鱼C论坛

 找回密码
 立即注册
查看: 2213|回复: 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

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

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

并做一些基本的工作:

  1. import urllib.request
  2. from urllib.error import HTTPError
  3. import os
  4. os.mkdir(r"C:\Users\username\Desktop\Image")
  5. os.chdir(r"C:\Users\username\Desktop\Image") # username换成自己的
复制代码


看看图片所在的url:

https://imgchr.com/i/GS4Q2R

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

后面加上图片名字,可以写出代码:

  1. def open_url(url):
  2.     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'}
  3.     res = urllib.request.urlopen(url)
  4.     return res

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


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

写的一团糟。。。

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

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

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

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

下载图片并保存了!

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

  5. def main(count):
  6.     url = make_url(count, count2)
  7.     if url == None:
  8.         return 0
  9.     res = open_url(url)
  10.     get_Image(res, count,count2)
  11.    
  12. for j in range(3):
  13.     for i in range(200):
  14.         try:
  15.             a = main(i)
  16.             if a == 0:
  17.                 continue
  18.         except HTTPError:
  19.            pass
  20.     count2 += 1
复制代码


简单说一下思路:

可以看下Network,会发现有

1_005, 2_069 这样的URL,

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

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

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


差不多就这样了,附上最终代码:

  1. import urllib.request
  2. from urllib.error import HTTPError
  3. import os
  4. os.mkdir(r"C:\Users\rzzl\Desktop\Image")
  5. os.chdir(r"C:\Users\rzzl\Desktop\Image")

  6. count2 = 1

  7. def open_url(url):
  8.     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'}
  9.     res = urllib.request.urlopen(url)
  10.     return res

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

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

  28. def main(count):
  29.     url = make_url(count, count2)
  30.     if url == None:
  31.         return 0
  32.     res = open_url(url)
  33.     get_Image(res, count,count2)
  34.    
  35. for j in range(3):
  36.     for i in range(200):
  37.         try:
  38.             a = main(i)
  39.             if a == 0:
  40.                 continue
  41.         except HTTPError:
  42.            pass
  43.     count2 += 1
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-26 16:03:32 | 显示全部楼层
P.S:电脑太渣,图片我放到图床上去了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

有bug,只爬了7张图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

修改了一下:
  1. import urllib.request
  2. from urllib.error import HTTPError
  3. import os
  4. try:
  5.     os.mkdir(r"C:\Users\rzzl\Desktop\Image")
  6. except OSError:
  7.     pass
  8. os.chdir(r"C:\Users\rzzl\Desktop\Image")

  9. count2 = 1

  10. def open_url(url):
  11.     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'}
  12.     res = urllib.request.urlopen(url)
  13.     return res

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

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

  31. def main(count):
  32.     url = make_url(count, count2)
  33.     if url == None:
  34.         return 0
  35.     res = open_url(url)
  36.     get_Image(res, count,count2)
  37.    
  38. for j in range(3):
  39.     for i in range(300):
  40.         try:
  41.             a = main(i)
  42.             if a == 0:
  43.                 continue
  44.         except HTTPError:
  45.            pass
  46.     count2 += 1
复制代码

这样就不需要手动删除已存在的文件夹了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-7 16:27:15 | 显示全部楼层
芜湖,我最近也写了几个爬鱼C上东西 、的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-29 04:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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