1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        pyspider爬取王者榮耀數(shù)據(jù)(上)

        共 3472字,需瀏覽 7分鐘

         ·

        2019-12-23 23:22

        咪哥雜談

        85d90491c0939eb5c82c0589840c5fba.webp

        本篇閱讀時(shí)間約為 8 分鐘。


        1

        前言


        不知道還有多少人記得幾個(gè)月前寫的兩篇文章,介紹關(guān)于 PyQuery 入門使用的教程。忘記的朋友,可以去回顧下用法:


        爬蟲神器之 PyQuery 實(shí)用教程(一)

        爬蟲神器之PyQuery實(shí)用教程(二),50行代碼爬取窮游網(wǎng)


        在之前的某一期文章下面,我記得有過一次留言,說是要安排一下王者榮耀的數(shù)據(jù)爬取,并且是使用 PySpider 爬蟲框架。


        那么,今天就帶來一篇關(guān)于?pyspider 的入門教程


        題外話:


        對(duì)于王者榮耀這種電競(jìng)類游戲來說,為什么有些人能輕松上王者?而有些人卻一直停留在低段位?無非就是沒有了解過規(guī)則,以及其背后的數(shù)據(jù)罷了。


        一款游戲,對(duì)于數(shù)據(jù)和規(guī)則熟知于心,那么,上分是輕輕松松的事兒。


        作為一個(gè)電競(jìng)游戲從初中開始玩的人來說,從 dota1 到 lol,再到后來的 dota2,最后到移動(dòng)端的王者榮耀,每次都是將數(shù)據(jù)與規(guī)則了解后,才得心應(yīng)手的去上分。


        放上我的王者榮耀段位圖,秀一波151790fad37e7b32087514451ca6c230.webp


        504a46057ebb2ffd67b8700cda7869fc.webp


        6e7e7ba22911b5e500ba021711580089.webp


        當(dāng)然,如果有時(shí)間的話,歡迎大家來找我一起玩b974bb4ad11bc12ed46177e0be7918a0.webp~可以一起排位。下面進(jìn)入正題。
        今天這篇,爬取的網(wǎng)站數(shù)據(jù)包括技能,英雄屬性數(shù)值,推薦裝備等。


        因?yàn)橛⑿墼斍閷傩詳?shù)據(jù)沒有找到官方提供的,所以特意找到了一個(gè)第三方游戲網(wǎng)站,本次僅是爬取數(shù)據(jù),后面打算用本次的數(shù)據(jù)做個(gè)分析。


        2

        準(zhǔn)備工作


        先來介紹下什么是 pyspider?為什么要用 pyspider ?
        1. 什么是?pyspiderf8b41bc8ace50c55250681dbbcc595dd.webp


        2. 為什么要用 pyspider

        pyspider是一款優(yōu)秀的框架,并配有 WebUI 的界面。
        平時(shí)我們寫爬蟲時(shí),只能是自己從零開始不斷地搭建代碼,但是有沒有發(fā)現(xiàn),當(dāng)你寫了很多爬蟲時(shí)候,有些邏輯無非就是在修改獲取節(jié)點(diǎn)元素的規(guī)則,其它代碼是不用做修改的。
        這樣一來,每次都要重復(fù)的去寫一些相同的代碼,不僅枯燥,且浪費(fèi)時(shí)間。在這樣的場(chǎng)景下,框架才會(huì)誕生出來。
        只需要你對(duì)變化的東西進(jìn)行“填充”即可,其余相同的地方,框架幫你做。
        對(duì)于框架來說,學(xué)習(xí)成本也各不相同,比如知名的爬蟲框架 scrapy ,相對(duì)于新手來說,可能難度就大一些。?
        而 pyspider 自帶了一個(gè)頁面,可以實(shí)時(shí)調(diào)試,對(duì)于初學(xué)者來說,上手容易,腳本編寫規(guī)則也非常簡(jiǎn)單。
        介紹就到此結(jié)束了。


        3

        確定爬取目標(biāo)


        先來看下王者榮耀第三方網(wǎng)站首頁:


        http://db.18183.com/wzry/

        18183王者榮耀


        9090d5c1c686a3228c1eb8f2ee5cd450.webp


        e8a6606928101aa0099176c576ca1f77.webp

        237e80a82a5d95cfeb823f8cbb4c6c74.webp

        d0754ddbce1d377a204383f01020a502.webp


        紅框即爬取目標(biāo),整理一下,具體有:


        • 每個(gè)英雄簡(jiǎn)介
        • 技能介紹描述
        • 推薦技能加點(diǎn)
        • 英雄出裝建議
        • 英雄屬性數(shù)值


        4

        pyspider入門


        1. 安裝 pyspider 庫


        開始介紹入門之前,先來安裝下它。


        pip install pyspider


        安裝完成后,以命令行的形式去執(zhí)行 pyspider ,讓它啟動(dòng)服務(wù)。


        fa755e60b84bde7433df5b4eae75b67b.webp


        2. 啟動(dòng)服務(wù)
        啟動(dòng)后,打開瀏覽器,輸入 http://localhost:5000?,可以看到下圖:


        2edae508da94633b57813613361c1b86.webp

        看到此頁面,說明 pyspider 初始化啟動(dòng)完成。
        3. 創(chuàng)建任務(wù)
        點(diǎn)擊 create 按鈕,創(chuàng)建新工程任務(wù)。name 隨意寫,start url 寫我們要爬取的首頁即可。


        9c578f62eba51efd5ca4ef074d1330f3.webp


        4. 自動(dòng)生成代碼


        65391b7cb20078b9f9515be4904332d9.webp


        cf1ceb966a76199cb78378b1e1089675.webp

        細(xì)看一下自動(dòng)生成的代碼。

        Handler類里有 3 個(gè)方法,分別是 on_start,index_page,detail_page 方法,每個(gè)方法上面有著自己的裝飾器。

        • on_start():?jiǎn)?dòng)后進(jìn)入的第一個(gè)方法,主 url 在此處被請(qǐng)求,響應(yīng)會(huì)傳入 callback 后面的 index_page 函數(shù)中。


        • index_page():主 url 返回的響應(yīng)源碼進(jìn)入到此函數(shù)到 response 里,其中 reponse.doc 用到了 PyQuery 語法,用來匹配你想要的信息節(jié)點(diǎn),繼續(xù)傳入到下一個(gè)詳情頁中。

        • detail_page():處理最后的具體邏輯,當(dāng)然你也可以繼續(xù)類似上面的回調(diào),主要看你要抓取的信息到底在多少層的頁面中。



        分析下王者榮耀的官網(wǎng),我們需要的信息:

        3eee671683f8d0d872cf7020b4632739.webp


        以下,首頁到魯班大師詳情頁為例:


        8d562b552f9c678068bb9b124eb95c04.webp


        點(diǎn)擊 run 后,看到 followers 下有個(gè)紅色數(shù)字1,說明請(qǐng)求到了,點(diǎn)過去看下。

        7d160c0826a0113ba3312d8293156394.webp


        920b442443a245183f9f93418f068b2d.webp


        點(diǎn)擊運(yùn)行后的瞬間,可以看到 pyspider 自動(dòng)為我們識(shí)別出了首頁的 126 條超鏈接,但是我想要的僅僅是英雄列表中的每個(gè)英雄的 url 地址。
        所以,接下來就要發(fā)揮 pyspider 的便捷之處了。

        點(diǎn)擊到 web ,即可實(shí)時(shí)看到首頁:

        208a69ac06c32ac07db916f8f4b92c96.webp


        點(diǎn)擊 css selector helper ,即 css 選擇器幫助。

        643d55d6b321fba2a03fcc120de7dbd1.webp


        如果之前用過 webscrape 插件的同學(xué)(爬蟲工具(二) webscraper 教程 (知乎案例)),一定很熟悉這個(gè)場(chǎng)景,手動(dòng)選擇你想要的節(jié)點(diǎn),然后系統(tǒng)自動(dòng)生成。

        點(diǎn)擊 css 樣式的右箭頭,?網(wǎng)頁自動(dòng)將 css 代碼幫你替換到你光標(biāo)放置的右側(cè)代碼位置:

        488ae4e5bbc60a9ecd3ef52672515dda.webp


        順便,打印下 each ,看下結(jié)果。
        打印發(fā)現(xiàn),這并不是我們想要的 li 節(jié)點(diǎn),所以繼續(xù)進(jìn)一步提取。


        可以看到此行 div 里包含的 li 標(biāo)簽,而 li 標(biāo)簽中又包含了 a 標(biāo)簽。
        于是,提取如下:
        def index_page(self, response):    print(response)    for each in response.doc('.hero-result-box>ul>li').items():        print(each('a').attr('href'))        a = each('a')        self.crawl(a.attr.href, callback=self.detail_page)

        fc29d148e15c798934d31e8abdc58957.webp


        其實(shí),熟悉 PyQuery 語法的朋友,一定很容易就寫出來了,這里給新手朋友放個(gè)思維導(dǎo)圖吧,也許你看了圖就明白了,不過多文字解釋了:

        e8e77a697bfb0195bf1fb330088b7bd1.webp


        像不像一個(gè)沙漏!讓我想起了營(yíng)銷學(xué)提到的漏斗模型,感興趣的同學(xué)可以自行查下資料了解。
        當(dāng)然,以上過程,如果你不習(xí)慣用 pyspider 給你提供的,也可以用 Chrome 等瀏覽器自帶的開發(fā)者工具自行調(diào)試。


        關(guān)于詳情頁,這里只以抓取頭像,姓名,定位來舉例:
        這里使用 css helper 去直接點(diǎn)我們想要的節(jié)點(diǎn),然后移動(dòng) css 代碼到右側(cè)代碼,很容易寫出爬取節(jié)點(diǎn):
        def detail_page(self, response):    name = response.doc('h1').text()    img = response.doc('.name > img').attr('src')    position = response.doc('.name-box > p').text()    return {        "url": response.url,        "name": name,        "img": img,        "position": position????????}

        結(jié)果:

        f83876b3b06df5cb9ab7b4faa4d43c86.webp


        直到這里一切都順利,但是讓我疑惑的是頭像的圖片為什么是 gif 地址?訪問下,一看這圖片一直在轉(zhuǎn)圈??!

        fa41714afaa30bf17aca81ef38d4ccd6.webp


        對(duì)于圖片源地址來說,我們還是用自帶的瀏覽器來調(diào)試,方便觀察。



        56de87b6e703ddc4a457e0cba0a7be27.webp


        經(jīng)過用開發(fā)者工具的這么一看,源地址應(yīng)該是這個(gè)才對(duì),怎么一直加載不出來?再仔細(xì)觀察爬取到的地址:

        http://js.18183.com/uploads/pc/yxzjol/sjk/loading.gif

        和 js 肯定有關(guān)系,果不其然,這里遇到了圖片的優(yōu)化機(jī)制,圖片懶加載。此機(jī)制也可以當(dāng)做反爬蟲機(jī)制的一種,隱藏了真實(shí)的圖片地址。

        圖片懶加載是一種網(wǎng)頁優(yōu)化技術(shù)。圖片作為一種網(wǎng)絡(luò)資源,在被請(qǐng)求時(shí)也與普通靜態(tài)資源一樣,將占用網(wǎng)絡(luò)資源,而一次性將整個(gè)頁面的所有圖片加載完,將大大增加頁面的首屏加載時(shí)間。

        網(wǎng)絡(luò)


        那么,如何找到圖片的真實(shí)地址?這就得去看 js 如何寫的了!
        拉到詳情頁最下方,看到有個(gè)懶加載的 js 。無疑就是它了!

        76ef42dbe19a1da8a8c3515a8463355b.webp


        點(diǎn)過去看下,可以看到有段這樣的代碼:

        6f6eacb6d852035d30ddc516b2dbe887.webp


        結(jié)合上下文看這段 js 代碼,最終能猜出, img 的真實(shí)地址屬性標(biāo)簽應(yīng)為:"data-original"。
        那么,來試一下:

        a3c3768439f32c988a0e6b49b70c6122.webp

        016c1b35bb590e19390b47826f5d2f9c.webp


        可以看到成功了。

        5

        結(jié)語


        以上,便是 pyspider 爬取的入門教程了,當(dāng)然,這只是抓取的步驟,數(shù)據(jù)離不開落地,下一篇,講下如何數(shù)據(jù)落地,并且提供源碼和這次抓取到的數(shù)據(jù)。
        本篇內(nèi)容高達(dá) 2500+ 字,如果看懂了,歡迎分享給身邊對(duì)爬蟲感興趣的其他人看喲!順便支持下點(diǎn)個(gè)好看唄,給點(diǎn)動(dòng)力~30ebb1250c5c47f2935d26e5b1bb3ae3.webp30ebb1250c5c47f2935d26e5b1bb3ae3.webp





        ▼往期精彩回顧▼本期無推薦,推薦內(nèi)容都在文中,回顧即可。

        34b520b604d3e03a6758087ab2f5cbaa.webp你點(diǎn)的每個(gè)在看,我都認(rèn)真當(dāng)成了喜歡


        瀏覽 77
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            a猛片免费 | 英国一级片 | free嫩白的1819性hd | 淫荡婷婷| 色五月婷婷国产 | 5252色国产精品 | 又粗又爽又长又猛的视频 | 性生交大片免费看A片 | 国产嫩草二区三区 | 91九色麻豆 |