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

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

面向对象:

1.疫情居家无聊之人

2.python略懂一点点就行


头文件引入:

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

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

爬取赛尔号图鉴:

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

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

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

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('载入成功,准备保存...')

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

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('当前文件夹下有同名目录')
    sys.exit(0)
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(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))

几个注意的地方:

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

上一篇:Acwing---1014. 登山 (Java)_最长上升子序列_LIS模板


下一篇:数组方法 map