qiuyouzhi 发表于 2020-3-26 16:02:18

Python 爬取鱼C表情包 (1)

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

Python 爬取表情包 (1)


写在前面的话

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

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

各位大佬可以顺便帮忙改一改{:10_254:}

2,抱歉啦,服务器君{:10_281:}

用到的模块:

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
    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
    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

qiuyouzhi 发表于 2020-3-26 16:03:32

P.S:电脑太渣,图片我放到图床上去了{:10_256:}

wuqramy 发表于 2020-3-26 16:22:51

哦哦,不错嘛!

wuqramy 发表于 2020-3-26 16:55:54

qiuyouzhi 发表于 2020-3-26 16:03
P.S:电脑太渣,图片我放到图床上去了

有bug,只爬了7张图

qiuyouzhi 发表于 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
    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
这样就不需要手动删除已存在的文件夹了!

温木zou 发表于 2021-1-7 16:27:15

芜湖,我最近也写了几个爬鱼C上东西 、的{:10_250:}
页: [1]
查看完整版本: Python 爬取鱼C表情包 (1)