python—爬取英雄聯盟皮膚圖片

  • 2019 年 10 月 8 日
  • 筆記

爬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分為目錄和文件兩個部分,以列表返回

最後爬取的效果就是這樣的:

唯一不足的就是爬取的速度很慢,因為加上太多的等待時間和瀏覽器操作的時間,不過效果還是可以的。