Python爬取LOL高清皮肤壁纸
Python爬取LOL高清皮肤壁纸
兴趣点:
这两天复习爬虫,CSDN上看到了一个爬取LOL皮肤的博客,哎这个有意思,看了一下他写的代码,感觉难度还可以,就结合着自己的理解写了一下
参考博客:
传送门:https://blog.csdn.net/weixin_44936889/article/details/103707406
爬取网址:
传送门:http://lol.52pk.com/pifu/hero/
爬虫大体思路及方法:
大体思路:
(1)我们的目标网页共43页,每页有25个皮肤左右,点开是皮肤大图及相关内容,其中的大图链接就是我们的目标
(2)我们要先把大约43×25个皮肤大图展示页面的链接先爬出来放到一个列表中
(3)再根据列表中的链接采用循环的方法获取其中的“英雄名-皮肤名”和皮肤图片链接,并将其一对一写入一个列表
(4)按顺序爬取列表中图片链接对应的图片并输出对应的提示信息
方法:
(1)页面获取方法:getHTMLText(url)
(2)把所有皮肤页URL写入列表:fillList(skinlist,url)
(3)获取皮肤命名和图片URL:getImageAddress(skinlist,nameAndImage)
(4)图片下载及保存:getImage(path,nameAndImage)
参数解读:
(1)skinlist——保存所有皮肤页面链接的列表
(2)nameAndImage——保存皮肤命名和皮肤图片链接的列表
(3)path——本地保存路径
部分细节讲解:
(1)观察网页原代码,找到页面的规律:
我们可以得知页面的真实地址,页面数43页和规律,所以后面的代码是这么写:
for i in range(1, 44): #皮肤展示页面共43页
new_url = url + "hero_{}.shtml".format(i) #拼出每个页面url
这里我是为了展示,其实没必要爬43页,毕竟Python运行速度太慢了
(2)目标网页可以识别Request请求,需要伪装成浏览器
kv = {"user-agent":"Mozilla/5.0"}
r = requests.get(url,headers = kv)
(3)从页面中获取到的文本尽量用 .strip() 方法去除两端空格
name = hero_name.strip() + '-' + skin_name.strip()
(4)踩坑记录:因为阿狸的KD/A皮肤文本里有一个"/",所以会造成找不到路径的错误,替换成空即可
name = name.replace('/', '')
(5)踩坑记录:关于 url 变量,在循环中不要写出下面这样的代码,url会变!url会变!url会变!
url = url + "hero_{}.shtml".format(i)
(6)Python标准异常:
菜鸟教程:https://www.runoob.com/python/python-exceptions.html
(7)关于打印进程提示信息:
有些同学可能认为这个没什么用,但这个很有用:一来可以提示程序运行的进度(Python运行实在是慢),二来可以用来差错,当断点使用
完整代码:
import requests
import re
import os
from bs4 import BeautifulSoupdef getHTMLText(url):try:kv = {"user-agent":"Mozilla/5.0"}r = requests.get(url,headers = kv)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print("getHTMLText失败!")return ""def fillList(skinlist,url):for i in range(1, 4): #皮肤展示页面共43页new_url = url + "hero_{}.shtml".format(i) #拼出每个页面urlhtml = getHTMLText(new_url)soup = BeautifulSoup(html, features = 'html.parser')div_soup = soup.find('div', class_ = 'ListBigContent')lis = div_soup('li') #查询li标签for li in lis:skin_url = li.find('a', target='_blank')skin_url = skin_url.get("href")skinlist.append(skin_url)print("页面{0}解读完毕!".format(i))def getImageAddress(skinlist,nameAndImage):for url in skinlist:html = getHTMLText(url)soup = BeautifulSoup(html, features = 'html.parser')name_div = soup.find('div', class_ = 'pifuIntroText pifuIntroText2')hero_name = name_div.find('h2').textskin_name = name_div.find('h1').textname = hero_name.strip() + '-' + skin_name.strip()name = name.replace('/', '') #把字符中的"/"替换成空,否则会影响路径,都是K/DA的锅image_div = soup.find('div', class_ = 'pifuIntroPic pifuIntroPic2')image_url = image_div.find('img')image_url = image_url.get('src')nameAndImage.append([name,image_url])print("{0}链接已获取!".format(name))def getImage(path,nameAndImage):try:if not os.path.exists(path):os.mkdir(path)for i in range(len(nameAndImage)):save_path = os.path.join(path, nameAndImage[i][0]+'.jpg')url = nameAndImage[i][1]r = requests.get(url)if not os.path.exists(save_path):image = r.contentwith open(save_path, 'wb') as f:f.write(image)print('{}保存成功!'.format(nameAndImage[i][0]))else:print('{}已存在'.format(nameAndImage[i][0])) except Exception as e:print('{}保存失败'.format(nameAndImage[i][0]),e)def main():skinlist = []nameAndImage =[]path = "./image" url = "http://lol.52pk.com/pifu/hero/"fillList(skinlist,url)print("fillList成功")getImageAddress(skinlist,nameAndImage)print("getImageAddress成功")getImage(path,nameAndImage)print("getImage成功")main()
Python爬取LOL高清皮肤壁纸相关推荐
- 如何利用 Python 爬取 LOL 高清精美壁纸?
作者 | 阿拉斯加 来源 | 杰哥的IT之旅 一.背景介绍 随着移动端的普及出现了很多的移动 APP,应用软件也随之流行起来.最近看到英雄联盟的手游上线了,感觉还行,PC 端英雄联盟可谓是爆火的游戏, ...
- python爬取4k高清壁纸(多线程版)
刚学了多线程,于是把上次写的博客拿出来进行改写, 原文链接:python爬取4k高清壁纸(再也不怕没有壁纸了) 爬取过程已经在上一次写过了,可以点击原文链接查看. 废话不多说,直接上多线程代码: im ...
- 用Python爬取wallhaven高清原图
wallhaven高清原图爬取 第一步:整理思路 第二步:分析网址 第三步:编写代码 第一步:整理思路 首先要知道自己要干嘛,怎么干,去哪里干?要干嘛?我们要爬取图片,而且我们要原图.怎么干?这里我用 ...
- python爬取4k高清壁纸(再也不怕没有壁纸了)
今天突然想换壁纸,在网上找了一圈没有找到满意的,正好学了爬虫,于是我就想把它们全都爬取下来,慢慢挑选. 这次爬取的目标是:彼岸图网动漫壁纸 接下来,我将详细讲解爬取过程: 首先点开网站,右键–检查 观 ...
- 使用Python爬取微博高清美女大图
打开微博官网,这里以爬取美女博主Duebass的所有图片为例,首先打开她的主页 主页中显示的都是一些小图,我们点击其中的某一张图片,就可以查看她的大图了. 打开F12查看图片的地址信息, //wx4. ...
- Python爬虫实战 | 利用多线程爬取 LOL 高清壁纸
来源:公众号[杰哥的IT之旅] 作者:阿拉斯加 ID:Jake_Internet 如需获取本文完整代码及 LOL 壁纸,请为本文右下角点赞并添加杰哥微信:Hc220088 获取. 一.背景介绍 随着移 ...
- python手机壁纸超清_详解Python静态网页爬取获取高清壁纸
前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...
- python爬虫系列(2):分析Ajax 爬取搜狗高清壁纸
这次我们来分析一下Ajax(至于Ajax是什么意思请自行百度了,这里就不过多解释),爬取一些高清壁纸,等待下载到本地之后,然后我们再慢慢的筛选这些壁纸.那么这次的目标就是搜狗壁纸,啥1280*720的 ...
- Python+Fiddler5带你爬取6000+高清王者荣耀cosplay图
Python+Fiddler5带你爬取6000+高清王者荣耀cosplay图 写在前面 最近在玩蛇的时候发现一个抓包神器Fiddler,简直不要太好用,于是当作练手就把这软件给安排了,王者荣耀盒子一个 ...
最新文章
- 理想L2辅助驾驶都撞车了,特斯拉的L5之梦怎么办?
- Linux 下 svn 的使用
- python多线程加锁异步处理装饰器
- PAT甲级1006 Sign In and Sign Out:[C++题解]字符串处理
- 嵌入式培训学习历程第二十二天
- 解决安装DEB包时报错
- 赫夫曼编码-译码器(Huffman Coding)
- NSIS制作安装包实例
- 《别输在不会表达上》— 综合素质提升书籍
- Zynq7000硬件开发之电源供电系统(PDN)设计(一)
- photoshop基础图文教程:第一章 下载与安装
- 可以打印快递电子面单的表格
- 维吉尼亚密码(Vigenere)
- python 列表作业
- 项目oms之----阿里巴巴字体图标运用详解 (含:彩色图标svg运用)
- Google Filament 源码学习(二):三方库分类总结
- vue 强制刷新子组件
- 用python画竹子_智慧职教moocPython程序设计基础期末考试查题公众号答案
- ## 2048/简易/欢迎提出建议
- Huawei LiteOS