超简单,Python爬取阴阳师原画壁纸

Python爬取阴阳师官网原画壁纸,附完整代码

  • 爬阴阳师官网插画
    • 网页分析
    • 教程开始
      • 1 获取网页源代码
            • 使用第三方库requests来获取网页
      • 2 获取目标数据
            • 使用BeautifulSoup解析网页
      • 3 下载图片
            • 取出1920*1080的图片链接
            • 获取并保存图片
    • 完整源码
    • 结语

目标网址:https://yys.163.com/media/picture.html
超简单,Python爬取阴阳师原画壁纸_第1张图片
结果展示
超简单,Python爬取阴阳师原画壁纸_第2张图片

爬阴阳师官网插画

相信很多人都喜欢网易的这款阴阳师手游,它里面有很多精美的插画,用来做手机轮换壁纸或电脑幻灯片壁纸再合适不过了,话不多说,马上开始…
目标:爬取所有1920*1080的图片

网页分析

点击上方的网址,我们可以发现所有的已加载出来的图片,向下滚动会不断加载出新的图片,好像是异步加载的数据,在网页空白处右击检查(chrome浏览器)或按F12审查元素超简单,Python爬取阴阳师原画壁纸_第3张图片
由上图可以观察到所有的图片都是放在class="tab-cont"div标签中的,我们需要从中拿出来我们需要的图片链接。
再次在网页空白处右击检察源代码,我们会发现这些数据并不是异步加载的,而是直接写在html代码中的,如下图所示:超简单,Python爬取阴阳师原画壁纸_第4张图片
既然是直接写在html中的,那么就非常简单了。

教程开始

1 获取网页源代码

使用第三方库requests来获取网页
import requests

url = 'https://yys.163.com/media/picture.html'  # 图片首页
response = requests.get(url)
print(response)

运行一下,返回结果是一个对象,200是网页的状态码,表示成功得到网页,说明该网页没有反爬虫,我们可以进行下一步工作了。
超简单,Python爬取阴阳师原画壁纸_第5张图片

2 获取目标数据

使用BeautifulSoup解析网页

content得到网页的内容,decode是网页源代码的编码方式,通过查看网页源代码可以发现该网页的编码方式是utf-8BeautifulSoup解析源代码,然后通过find函数获取网页源代码中的标签,对于我们这种小白来说极为简单好用。因为网页中分为横版竖版,含有不止一个

标签,所以我使用find_all来找到所有的,以便可以爬取竖版的图片。

import requests
from bs4 import BeautifulSoup

url = 'https://yys.163.com/media/picture.html'  # 图片首页
response = requests.get(url).content.decode('utf-8')
soup = BeautifulSoup(response, 'lxml')
wallpaper = soup.find_all('div', {'class': 'tab-cont'})  # 横板加竖版
print(wallpaper)

超简单,Python爬取阴阳师原画壁纸_第6张图片

3 下载图片

取出1920*1080的图片链接

分别拿出来横版图片标签和竖版图片标签

pc = wallpaper[0].find_all('div', {'class': 'mask'})  # 横版图片
mo = wallpaper[1].find_all('div', {'class': 'mask'})  # 竖版图片

循环对每一张照片进行链接筛选,a = pc[i].find_all('a')拿出每一张照片的所有链接,因为得到的a标签格式如下:

1920x1080

我们需要得到链接:

href="https://yys.res.netease.com/pc/zt/20170731172708/data/picture/20191112/1/1920x1080.jpg

这里使用正则表达式'href="(.*?)" target'来获取图片链接,

因为图片的尺寸并不都是6种,有5张的、还有4张、3张的,所以需要针对性的做特殊处理。

做完这一步,所有1920*1080的图片链接都存放在了pc_list中。

pc_list = []  # 新建一个空列表存放横版1920*1080的图片
for i in range(len(pc)):
    a = pc[i].find_all('a')
    if len(a) == 6:
        url = re.findall('href="(.*?)" target', str(a[3]))[0]  # 提取1920*1080的图片地址
        pc_list.append(url)
    elif len(a) == 5:
        url = re.findall('href="(.*?)" target', str(a[2]))[0]
        pc_list.append(url)
    elif len(a) == 4:
        url = re.findall('href="(.*?)" target', str(a[1]))[0]
        pc_list.append(url)
    elif len(a) == 3:
        url = re.findall('href="(.*?)" target', str(a[0]))[0]
        pc_list.append(url)
print(pc_list)

在这里插入图片描述

获取并保存图片

我们先来创建一个文件夹用来存放图片

if not os.path.exists('./横版19201080'):
	os.mkdir('./横版19201080')
os.chdir('./横版19201080')

写一个循环来爬取每一张图片,加入time.sleep()延时,根据我的经验,不加延时会出现两种情况:被网站发现,然后断开连接;或者小网站被爬崩。同样,图片链接也是通过requests来请求的,也没有任何反爬,之后判断状态码是否成功拿到图片,保存图片以二进制'wb'方式保存为.jpg格式。
因为网页中并没有为每张图片提供名称,所以使用格式化字符串f'{i}.jpg'为图片命名。

for i in range(len(pc_list)):
    time.sleep(0.3)  # 爬取延时,防止被察觉,远程关闭连接
    img = requests.get(pc_list[i])
    if img.status_code ==200:
        open(f'{i}.jpg', 'wb').write(img.content)
        print(f'{i} 下载成功')
    else:
        print(f'{i} 下载失败  原因:{img.status_code}')

竖版的图片获取理论与此相似,修改部分代码就可以了。
好了,到这里爬虫代码就结束了,完整代码在本文最后,谢谢大家观看!

下次为大家带来多线程爬取版本,爬取速度更快

完整源码

# _*_ coding: utf-8 _*_
#开发团队:独狼科技
#开发人员:No Sun no moon
#开发时间:2020/4/15 8:40
#文件名称:yys.py
#开发工具:PyCharm

import re
import os
import time
import requests
from bs4 import BeautifulSoup

url = 'https://yys.163.com/media/picture.html'
response = requests.get(url).content.decode('utf-8')
soup = BeautifulSoup(response, 'lxml')
wallpaper = soup.find_all('div', {'class': 'tab-cont'})  # 横板加竖版

pc = wallpaper[0].find_all('div', {'class': 'mask'})  # 横版图片
mo = wallpaper[1].find_all('div', {'class': 'mask'})  # 竖版图片

pc_list = []  # 新建一个空列表存放横版1920*1080的图片
for i in range(len(pc)):
    a = pc[i].find_all('a')
    if len(a) == 6:
        url = re.findall('href="(.*?)" target', str(a[3]))[0]  # 提取1920*1080的图片地址
        pc_list.append(url)
    elif len(a) == 5:
        url = re.findall('href="(.*?)" target', str(a[2]))[0]
        pc_list.append(url)
    elif len(a) == 4:
        url = re.findall('href="(.*?)" target', str(a[1]))[0]
        pc_list.append(url)
    elif len(a) == 3:
        url = re.findall('href="(.*?)" target', str(a[0]))[0]
        pc_list.append(url)


if not os.path.exists('./横版19201080'):
	os.mkdir('./横版19201080')
os.chdir('./横版19201080')

for i in range(len(pc_list)):
    time.sleep(0.3)  # 爬取延时,防止被察觉,远程关闭连接
    img = requests.get(pc_list[i])
    if img.status_code ==200:
        open(f'{i}.jpg', 'wb').write(img.content)
        print(f'{i} 下载成功')
    else:
        print(f'{i} 下载失败  原因:{img.status_code}')

结语

通过本文的学习,我们已经初步了解到了Python的爬虫基础,对于爬虫有了初步的了解:请求网页、解析网页、获取目标数据。本文向大家展示了一个非常基础简单的爬虫,作为入门级的爬虫学习,来认识requestsget函数的应用,以及使用bs4BeautifulSoup来解析网页,使用find函数来获取网页标签,和对于图片文件的写入方式等。

欢迎大家评论点赞收藏

你可能感兴趣的:(Python爬虫学习)