专栏首页孤独的Spython---爬取英雄联盟皮肤图片

python---爬取英雄联盟皮肤图片

爬LOL的皮肤高清图片的大致步骤就是用selenium去爬取英雄联盟所以英雄的皮肤的url地址,然后在用requests库去将图片下载到本地。


爬取的第一步,先去分析网站。

皮肤图片的位置在官网的资料库,然后点击英雄进入英雄界面

这里就是皮肤的获取地了。

按F12然后定位到图片位置的代码

然后这里就有第一个坑:

一开始他不会显示所有皮肤的代码出来,你要点击其他的皮肤后它才会显示出全部的代码.

然后点进去看,里面就有我们需要的url代码,和图片的名称了。

代码:

def get_pic_url(mapath):
    time.sleep(10)
    namepath = '//ul[@id="skinNAV"]/li'
    name_list = browser.find_elements_by_xpath(namepath)#小框
    while len(name_list)<=1:        browser.refresh()
        time.sleep(5)
    name_list = browser.find_elements_by_xpath(namepath)
    name_list[1].click()
    time.sleep(2)

    lipath = '//*[@id="skinBG"]/li'
    li_list = browser.find_elements_by_xpath(lipath)#大图的

    for i in range(len(li_list)):
        imgpath = '//li['+str(i+1)+']/img'
        x = li_list[i].find_element_by_xpath(imgpath)
        if i ==0:
            name = x.get_attribute('alt')
            picpath = mapath + os.sep + str(name)
            if not os.path.exists(picpath):
                os.makedirs(picpath)  #创建存放图片的文件夹
            else:
                print('文件夹已存在!!')

        pic_name = x.get_attribute('alt').replace('/','')
        pic_url = x.get_attribute('src')
        pic = requests.get(pic_url).content
        with open(picpath+os.sep+pic_name+'.png','wb') as p:
            p.write(pic)

定位的方法是用xpath定位的,在F12里可以复制xpath地址

然后在后面加/li,便是获取所有的li里面的数据了。

代码就是先获取这里的地址:

然后实现点击下一个,然后在获取大图的内容。并用

get_attribute

提取出数据名和url,有一些英雄的名字有斜杆的,所有要替换掉,否则会报错,有的时候会刷新不出来网页,就获取不到数据,紧接着报错,加个循环如果获取不到数据就重新获取即可。

然后就是做循环爬取所有的英雄的图片

一开始打算用英雄的url实现循环,仔细一看,后面几个的英雄并不是叠加尾数,用url不能循环操作,所有利用selenium的自动化的便利性,做点击,获取图片,然后返回英雄选择界面,再点击下一个等等,这样子做循环。

if __name__ == '__main__':
    cwpath = os.getcwd()
    mpath = cwpath+os.sep+'LOL'
    if not os.path.exists(mpath):
        os.makedirs(mpath)
    else:
        print('文件夹已存在!!')
    browser.get(mainurl)
    time.sleep(5)
    h_path = '//*[@id="jSearchHeroDiv"]/li'
    h_list = browser.find_elements_by_xpath(h_path)
    i = 74
    while i<len(h_list):
        h_list[i].click()
        get_pic_url(mpath)
        time.sleep(2)
        browser.back()
        i+=1
        h_list = browser.find_elements_by_xpath(h_path)

对文件夹的操作,我这里直接保存到项目文件夹下面,用os.getcwd()获取当前路径,也可以相应选择你喜欢的位置,只需要换成绝对路径即可,还有就是文件夹下面的文件夹的时候记得添加一个os.sep,

下面贴上os的常用操作

os.path.sep:#路径分隔符

os.path.altsep: #根目录

os.path.curdir:#当前目录,其实就是一个.。

os.path.pardir:#父目录,其实是两个.。

os.path.abspath(path):#绝对路径

os.path.join(): #常用来链接路径,这个才是最重要的方法。

os.path.split(path): #把path分为目录和文件两个部分,以列表返回

最后爬取的效果就是这样的:

唯一不足的就是爬取的速度很慢,因为加上太多的等待时间和浏览器操作的时间,不过效果还是可以的。

本文分享自微信公众号 - 孤独的S(sjw_980305),作者:sjw1998

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python---爬取拉勾网

    在过几个月又是一年一度的毕业生求职时间了,这时候都需要往各个网站各个平台投递简历,这时候一份好的简历很重要,找对方向也很重要。这里我爬取了拉勾网30页关键字为...

    sjw1998
  • python---图形界面的2048

    之前做了控制台版的2048,那样子玩着不爽,玩着没那么随意,于是把他做成带ui的2048。大部分的逻辑都是一样的,做这种小游戏,最难的就是的逻辑实现过程,一旦...

    sjw1998
  • python--控制台版2048

    游戏规则也很通俗移动,四个方向移动,相同就相加,不同就搁置,然后把最终刷到2048则游戏结束。

    sjw1998
  • python 的路径操作

    os.sep 表示默认的文件路径分隔符,windows为\, linux为/ os.walk(spath): 用来遍历目录下的文件和子目录 os.listd...

    py3study
  • python实现的模板生成脚本

    最近项目需要,针对主项目提取一个小的基础版本,供于在新建项目时使用,所以就有这个python模板生成脚本,其作用如下:

    py3study
  • python3 __name__

    所以我们平常见到的__name__ == "__main__"就是指当前文件作为脚本运行时会发生的一些事情, 防止当前文件作为模块导入时运行自己不想运行的代码

    py3study
  • 再论:关于 equals 和 hashCode

    上篇 关于 equals 和 hashCode 关于 equals 和 hashCode 的基本性质已经论述过了。

    shengjk1
  • python中的shell操作

    这个函数可以调用shell运行命令行command并且返回它的返回值。试一下在python的解释器里输入os.system(”ls -l”),就可以看到”ls”...

    py3study
  • Element Table 动态生成列并且不同的列显示不同的样式

    我们在使用表格控件时,经常需要动态生成表格的列,并且某些列要求特殊的样式(如右对齐)

    tianyawhl
  • 基于 Flink 和 Drools 的实时日志处理

    为了解决上面2个问题,我们基于flink和drools规则引擎做了实时的日志处理服务。

    zhisheng

扫码关注云+社区

领取腾讯云代金券