<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3472字,需瀏覽 7分鐘

           ·

          2019-12-23 23:22

          咪哥雜談

          85d90491c0939eb5c82c0589840c5fba.webp

          本篇閱讀時間約為 8 分鐘。


          1

          前言


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


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

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


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


          那么,今天就帶來一篇關于?pyspider 的入門教程。


          題外話:


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


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


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


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


          504a46057ebb2ffd67b8700cda7869fc.webp


          6e7e7ba22911b5e500ba021711580089.webp


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


          因為英雄詳情屬性數(shù)據(jù)沒有找到官方提供的,所以特意找到了一個第三方游戲網(wǎng)站,本次僅是爬取數(shù)據(jù),后面打算用本次的數(shù)據(jù)做個分析。


          2

          準備工作


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


          2. 為什么要用 pyspider

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


          3

          確定爬取目標


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


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

          18183王者榮耀


          9090d5c1c686a3228c1eb8f2ee5cd450.webp


          e8a6606928101aa0099176c576ca1f77.webp

          237e80a82a5d95cfeb823f8cbb4c6c74.webp

          d0754ddbce1d377a204383f01020a502.webp


          紅框即爬取目標,整理一下,具體有:


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


          4

          pyspider入門


          1. 安裝 pyspider 庫


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


          pip install pyspider


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


          fa755e60b84bde7433df5b4eae75b67b.webp


          2. 啟動服務
          啟動后,打開瀏覽器,輸入 http://localhost:5000?,可以看到下圖:


          2edae508da94633b57813613361c1b86.webp

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


          9c578f62eba51efd5ca4ef074d1330f3.webp


          4. 自動生成代碼


          65391b7cb20078b9f9515be4904332d9.webp


          cf1ceb966a76199cb78378b1e1089675.webp

          細看一下自動生成的代碼。

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

          • on_start():啟動后進入的第一個方法,主 url 在此處被請求,響應會傳入 callback 后面的 index_page 函數(shù)中。


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

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



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

          3eee671683f8d0d872cf7020b4632739.webp


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


          8d562b552f9c678068bb9b124eb95c04.webp


          點擊 run 后,看到 followers 下有個紅色數(shù)字1,說明請求到了,點過去看下。

          7d160c0826a0113ba3312d8293156394.webp


          920b442443a245183f9f93418f068b2d.webp


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

          點擊到 web ,即可實時看到首頁:

          208a69ac06c32ac07db916f8f4b92c96.webp


          點擊 css selector helper ,即 css 選擇器幫助。

          643d55d6b321fba2a03fcc120de7dbd1.webp


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

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

          488ae4e5bbc60a9ecd3ef52672515dda.webp


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


          可以看到此行 div 里包含的 li 標簽,而 li 標簽中又包含了 a 標簽。
          于是,提取如下:
          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


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

          e8e77a697bfb0195bf1fb330088b7bd1.webp


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


          關于詳情頁,這里只以抓取頭像,姓名,定位來舉例:
          這里使用 css helper 去直接點我們想要的節(jié)點,然后移動 css 代碼到右側(cè)代碼,很容易寫出爬取節(jié)點:
          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


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



          56de87b6e703ddc4a457e0cba0a7be27.webp


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

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

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

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

          網(wǎng)絡


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

          76ef42dbe19a1da8a8c3515a8463355b.webp


          點過去看下,可以看到有段這樣的代碼:

          6f6eacb6d852035d30ddc516b2dbe887.webp


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

          a3c3768439f32c988a0e6b49b70c6122.webp

          016c1b35bb590e19390b47826f5d2f9c.webp


          可以看到成功了。

          5

          結(jié)語


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





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

          34b520b604d3e03a6758087ab2f5cbaa.webp你點的每個在看,我都認真當成了喜歡


          瀏覽 77
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一级黄色艳情A片 | 日韩一区二区三区免费播放 | 变态AV在线 | 午夜靠逼| 免费观看一区二区三区四区 |