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 P.S:电脑太渣,图片我放到图床上去了{:10_256:} 哦哦,不错嘛! qiuyouzhi 发表于 2020-3-26 16:03
P.S:电脑太渣,图片我放到图床上去了
有bug,只爬了7张图 本帖最后由 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
这样就不需要手动删除已存在的文件夹了! 芜湖,我最近也写了几个爬鱼C上东西 、的{:10_250:}
页:
[1]