python爬蟲工程師 成長之路十 selenium+phantomjs+request爬取lol所有英雄頭像和裝備圖片


爬取所有英雄頭像


選擇爬取目標


這裏我們選擇
https://lol.qq.com/data/info-heros.shtml

英雄聯盟英雄資料
在這裏插入圖片描述

尋找圖片位置

通過瀏覽器的檢查功能,尋找圖片所在位置

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

觀察發現所有英雄頭像都處於"<img src="">"裏面
所以,構建正則表達式如下
pattern1='<img src="(.+?)">'
是不是覺得騰訊的東西太簡單了?其實,你一爬就會發現根本沒有圖片後面我發現這裏使用的是js動態加載的
經過我反覆琢磨,終於發現資源文件都在//lol.qq.com/biz/hero/champion.js

在這裏插入圖片描述

引入selenium和phantomjs

dr = webdriver.PhantomJS()

用phantomjs 解析js

構造xpath對元素定位

img=dr.find_elements_by_xpath('//ul//li//a//img')

獲取每個英雄的名字和頭像url

觀察發現 每個img標籤的src屬性是url,alt屬性是名字

在這裏插入圖片描述

for i in img:
	i.get_attribute('src')
	i.get_attribute('alt')	

最終步驟

最終代碼

from selenium import webdriver
import urllib.request
from bs4 import BeautifulSoup
#無頭瀏覽器
dr = webdriver.PhantomJS()
#打開網頁
dr.get('https://lol.qq.com/data/info-heros.shtml')
#xpath定位
img=dr.find_elements_by_xpath('//ul//li//a//img')

try:  
    for i in img:
        name=i.get_attribute('alt')
        url=i.get_attribute('src')
        imgname="D:/picture/"+str(name)+".jpg"
        #保存進本地
        urllib.request.urlretrieve(url,filename=imgname)
except urllib.error.URLError as e:#簡單異常處理
    pass

#退出瀏覽器
dr.quit()

結果展示
在這裏插入圖片描述
至此,148個英雄頭像爬取完畢


爬取裝備圖片


裝備與英雄的大部分都相同,只需簡單幾步即可實現爬取裝備圖片

https://lol.qq.com/data/info-item.shtml

xpath也稍微有點不一樣

dr.find_elements_by_xpath('//div//ul//li//img')

裝備的名稱位於img同級標籤

dr.find_elements_by_xpath('//div//ul//li//p')

圖片和名字是兩個列表

最終代碼

try:  
    j=1 # 因爲之前的xpath匹配出來多一個圖片,這裏從一開始去掉
    for i in name_list:#遍歷name列表
        name=i.text
        url=img_list[j].get_attribute('src')#獲取圖片url
        j=j+1
        imgname="D:/picture/"+str(name)+".jpg"
        print(name+url)
        #保存進本地
        urllib.request.urlretrieve(url,filename=imgname)
except urllib.error.URLError as e:#簡單異常處理
    pass

成功展示
鞋子和打野刀存在命名重複,會被覆蓋一部分
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章