4399知名游戏-赛尔号图鉴的爬取

4399知名游戏-赛尔号图鉴的爬取

面向对象:

1.疫情居家无聊之人

2.python略懂一点点就行


头文件引入:

如果没有下面的头文件不要慌,打开你的python终端pip install +包名即可

from bs4 import BeautifulSoup
import requests
import json
import os
import sys

爬取赛尔号图鉴:

右键查看网页源代码你会发现编码方式为’GBK’且有个script,省的我们动态获取链接,可以看到petData是一个二维列表,petData[:,1]是图鉴详情页,点进去看如下所示

4399知名游戏-赛尔号图鉴的爬取_第1张图片
4399知名游戏-赛尔号图鉴的爬取_第2张图片

target = 'http://news.4399.com/seer/jinglingdaquan/'
req = requests.get(target).content.decode('gbk')
html = req

print('开始爬取...')
bf  = BeautifulSoup(html)
t = bf.select('body > script')    #图鉴页面的详情信息
temp = str(t[0])[22:]
temp = temp[:-12]
lis = json.loads(temp)    #str格式的list转list

print('获取图片html...')
length = len(lis)
html_list = []
for i in range(length):
    html_list.append(lis[i][1])    #把详情url先存起来
print('载入成功,准备保存...')

先用html_list存储详情页的url,当然可以直接进行下面的转换不用先存
4399知名游戏-赛尔号图鉴的爬取_第3张图片

F12选中图片发现图片url竟在之中,get后保存本地即可,保存函数如下

def save_img(name,url):  # 保存图片
    img = requests.get(url)
    f = open(name, 'ab')
    f.write(img.content)
    print(name, '文件保存成功!')
    f.close()
dirname = input('请输入存图片的文件夹名')
flag = os.path.exists('./'+dirname)
if not flag:
    os.makedirs('./'+dirname)
else:
    print('当前文件夹下有同名目录')
for i in range(length):
    temp = requests.get(html_list[i]).content.decode('gbk')
    temp_bf = BeautifulSoup(temp)
    img = temp_bf.select('#state > div.focus.cf > div:nth-child(2) > img')
    lis_img = str(img).split('"')
    save_img('./'+dirname+'/'+lis_img[1]+'.jpg',lis_img[3])
now = os.getcwd()
print('爬取完毕!存于'+str(now)+'/'+str(dirname))

写在最后:

当然你们可以不看博客直接复制下面的代码

from bs4 import BeautifulSoup
import requests
import json
import os
import sys

def save_img(name,url):  # 保存图片
    img = requests.get(url)
    f = open(name, 'ab')
    f.write(img.content)
    print(name, '文件保存成功!')
    f.close()
target = 'http://news.4399.com/seer/jinglingdaquan/'
req = requests.get(target).content.decode('gbk')
html = req

print('开始爬取...')
bf  = BeautifulSoup(html)
t = bf.select('body > script')
temp = str(t[0])[22:]
temp = temp[:-12]
lis = json.loads(temp)

print('获取图片html...')
length = len(lis)
html_list = []
for i in range(length):
    html_list.append(lis[i][1])
print('载入成功,准备保存...')

dirname = input('请输入存图片的文件夹名')
flag = os.path.exists('./'+dirname)
if not flag:
    os.makedirs('./'+dirname)
else:
    print('当前文件夹下有同名目录')
    #sys.exit(0)
for i in range(967,length):
    print(i,end = '')
    try:    #用于爬取精灵(多形态需要额外判断select条件,我懒),有些不符合的get请求结果直接跳过
        temp = requests.get(html_list[i]).content.decode('gbk')
        temp_bf = BeautifulSoup(temp)
        img = temp_bf.select('#state > div.focus.cf > div:nth-child(2) > img')
        lis_img = str(img).split('"')
        save_img('./'+dirname+'/'+lis_img[1]+'.jpg',lis_img[3])
    except:
        continue
now = os.getcwd()
print('爬取完毕!存于'+str(now)+'/'+str(dirname))

几个注意的地方:

1.这里的切片位置可能会变,你可以选择更加智能的切片,当然,是因为我懒。
在这里插入图片描述
2.这里的select,推荐EDGE浏览器F12选中目标标签,右键复制SELECT即可
在这里插入图片描述
3.为什么要爬赛尔号图鉴呢?
吃饱了撑的,当然不是,准备搭建简易生成对抗网络就叫它SEERGAN吧(手动滑稽)随机生成精灵,效果好的话就好玩了。

你可能感兴趣的:(SEER,python,爬虫)