簡易數(shù)據(jù)分析 10 | Web Scraper 翻頁——抓取「滾動加載」類型網(wǎng)頁

image

這是簡易數(shù)據(jù)分析系列的第 10 篇文章蛉鹿。

原文首發(fā)于博客園:簡易數(shù)據(jù)分析 10衙伶。

友情提示:這一篇文章的內(nèi)容較多蕴潦,信息量比較大,希望大家學(xué)習(xí)的時候多看幾遍汪榔。

我們在刷朋友圈刷微博的時候蒲拉,總會強調(diào)一個『』字,因為看動態(tài)的時候痴腌,當把內(nèi)容拉到屏幕末尾的時候雌团,APP 就會自動加載下一頁的數(shù)據(jù),從體驗上來看士聪,數(shù)據(jù)會源源不斷的加載出來锦援,永遠沒有盡頭。

image

我們今天就是要講講剥悟,如何利用 Web Scraper 抓取滾動到底翻頁的網(wǎng)頁灵寺。

今天我們的練手網(wǎng)站是知乎數(shù)據(jù)分析模塊的精華帖,網(wǎng)址為:

https://www.zhihu.com/topic/19559424/top-answers

image

這次要抓取的內(nèi)容是精華帖的標題区岗、答題人贊同數(shù)略板。下面是今天的教程。

1.制作 Sitemap

剛開始我們要先創(chuàng)建一個 container慈缔,包含要抓取的三類數(shù)據(jù)叮称,為了實現(xiàn)滾動到底加載數(shù)據(jù)的功能,我們把 container 的 Type 選為 Element scroll down藐鹤,就是滾動到網(wǎng)頁底部加載數(shù)據(jù)的意思。

image

在這個案例里,選擇的元素名字為 div.List-item章鲤。

image

為了復(fù)習(xí)上一節(jié)通過數(shù)據(jù)編號控制條數(shù)的方法辐益,我們在元素名后加個 nth-of-type(-n+100),暫時只抓取前 100 條數(shù)據(jù)括堤。

image

然后我們保存 container 這個節(jié)點碌秸,并在這個節(jié)點下選擇要抓取的三個數(shù)據(jù)類型。

首先是標題悄窃,我們?nèi)∶麨?title讥电,選擇的元素名為 [itemprop='zhihu:question'] a

image

然后是答題人名字 name 與 贊同數(shù) like,選擇的元素名分別為 #Popover10-toggle abutton.VoteButton--up

image
image

2.爬取數(shù)據(jù)轧抗,發(fā)現(xiàn)問題

元素都選擇好了恩敌,我們按 Sitemap zhihu_top_answers -> Scrape -> Start craping 的路徑進行數(shù)據(jù)抓取,等待十幾秒結(jié)果出來后横媚,內(nèi)容卻讓我們傻了眼:

image

數(shù)據(jù)呢纠炮?我要抓的數(shù)據(jù)呢月趟?怎么全變成了 null?

在計算機領(lǐng)域里恢口,null 一般表示空值孝宗,表示啥都沒有,放在 Web Scraper 里耕肩,就表示沒有抓取到數(shù)據(jù)因妇。

image

我們可以回想一下,網(wǎng)頁上的的確確存在數(shù)據(jù)猿诸,我們在整個的操作過程中婚被,唯一的變數(shù)就是選擇元素這個操作上。所以梳虽,肯定是我們選擇元素時出錯了址芯,導(dǎo)致內(nèi)容匹配上出了問題,無法正常抓取數(shù)據(jù)窜觉。要解決這個問題谷炸,我們就要查看一下網(wǎng)頁的構(gòu)成。

3.分析問題

查看一下網(wǎng)頁的構(gòu)成禀挫,就要用瀏覽器的另一個功能了淑廊,那就是選擇查看元素

1.我們點擊控制面板左上角的箭頭特咆,這時候箭頭顏色會變藍季惩。

2.然后我們把鼠標移動到標題上,標題會被一個藍色的半透明遮罩蓋住腻格。

3.我們再點擊一下標題画拾,會發(fā)現(xiàn)我們會跳轉(zhuǎn)到 Elements 這個子面板,內(nèi)容是一些花花綠綠看不大懂的代碼

image

做到這里心里別發(fā)怵菜职,這些 HTML 代碼不涉及什么邏輯青抛,在網(wǎng)頁里就是個骨架,提供一些排版的作用酬核。如果你平常用 markdown 寫作蜜另,就可以把 HTML 理解為功能更復(fù)雜的 markdown。

結(jié)合 HTML 代碼嫡意,我們先看看 [itemprop='zhihu:question'] a 這個匹配規(guī)則是怎么回事举瑰。

image

首先這是個樹形的結(jié)構(gòu):

  • 先是一個名字為 h2 的標簽 <h2>...</h2>,它有個 class='ContentItem-title' 的屬性蔬螟;
  • 里面又有個名為 div 的標簽 <div>...</div>此迅,它有個 itemprop='zhihu:question' 的屬性;
  • div 標簽里又有一個 名字為 a 的標簽 <a>...</a>
  • a 標簽里有一行耸序,就是我們要抓取的標題:如何快速成為數(shù)據(jù)分析師忍些?

上句話從可視化的角度分析,其實就是一個嵌套的結(jié)構(gòu)坎怪,我把關(guān)鍵內(nèi)容抽離出來罢坝,內(nèi)容結(jié)構(gòu)是不是清晰了很多?

<h2 class='ContentItem-title'/>
    <div itemprop='zhihu:question'/>
        <a>如何快速成為數(shù)據(jù)分析師搅窿?</a>
    </div>
</h2>

我們再分析一個抓取標題為 null 的標題 HTML 代碼炸客。

image

我們可以很清楚的觀察到,在這個標題的代碼里戈钢,少了名為 div 屬性為 itemprop='zhihu:question' 的標簽!這樣導(dǎo)致我們的匹配規(guī)則匹配時找不到對應(yīng)標簽是尔,Web Scraper 就會放棄匹配殉了,認為找不到對應(yīng)內(nèi)容,所以就變成 null 了拟枚。

找到原因后我們就好解決問題了薪铜。

4.解決問題

我們發(fā)現(xiàn),選擇標題時恩溅,無論標題的嵌套關(guān)系怎么變隔箍,總有一個標簽不變,那就是包裹在最外層的脚乡,屬性名為 class='ContentItem-title'h2 標簽蜒滩。我們?nèi)绻苤苯舆x擇 h2 標簽,不就可以完美匹配標題內(nèi)容了嗎奶稠?

邏輯上理清了關(guān)系俯艰,我們?nèi)绾斡?Web Scraper 操作?這時我們就可以用上一篇文章介紹的內(nèi)容锌订,利用鍵盤 P 鍵選擇元素的父節(jié)點:

image

放在今天的課程里竹握,我們點擊兩次 P 鍵,就可以匹配到標題的父標簽 h2 (或 h2.ContentItem-title):

image

以此類推辆飘,因為答題人名字也出現(xiàn)了 null啦辐,我們分析了 HTML 結(jié)構(gòu)后選擇名字的父標簽 span.AuthorInfo-name,具體的分析操作和上面差不多蜈项,大家可以嘗試一下芹关。

image

我的三個子內(nèi)容的選擇器如下,可以作為一個參考:

image

最后我們點擊 Scrape 爬取數(shù)據(jù)紧卒,檢查一下結(jié)果充边,沒有出現(xiàn) null,完美!

image

5.吐槽時間

爬取知乎數(shù)據(jù)時浇冰,我們會發(fā)現(xiàn)滾動加載數(shù)據(jù)那一塊兒很快就做完了贬媒,在元素匹配那里卻花了很多時間。

這間接的說明肘习,知乎這個網(wǎng)站從代碼角度上分析际乘,寫的還是比較的。

如果你爬取的網(wǎng)站多了漂佩,就會發(fā)現(xiàn)大部分的網(wǎng)頁結(jié)構(gòu)都是比較「隨心所欲」的脖含。所以在正式抓取數(shù)據(jù)前,經(jīng)常要先做小規(guī)模的嘗試投蝉,比如說先抓取 20 條养葵,看看數(shù)據(jù)有沒有問題。沒問題后再加大規(guī)模正式抓取瘩缆,這樣做一定程度上可以減少返工時間关拒。

6.下期預(yù)告

這期內(nèi)容比較多,大家可以多看幾遍消化一下庸娱,下期我們說些簡單的內(nèi)容着绊,講講如何抓取表格內(nèi)容。

7.推薦閱讀

簡易數(shù)據(jù)分析 09 | Web Scraper 自動控制抓取數(shù)量 & Web Scraper 父子選擇器

簡易數(shù)據(jù)分析 08 | Web Scraper 翻頁——點擊「更多按鈕」翻頁

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熟尉,一起剝皮案震驚了整個濱河市归露,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斤儿,老刑警劉巖剧包,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異往果,居然都是意外死亡玄捕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進店門棚放,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枚粘,“玉大人,你說我怎么就攤上這事飘蚯♀善” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵局骤,是天一觀的道長攀圈。 經(jīng)常有香客問我,道長峦甩,這世上最難降的妖魔是什么赘来? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任现喳,我火速辦了婚禮,結(jié)果婚禮上犬辰,老公的妹妹穿的比我還像新娘嗦篱。我一直安慰自己,他們只是感情好幌缝,可當我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布灸促。 她就那樣靜靜地躺著,像睡著了一般涵卵。 火紅的嫁衣襯著肌膚如雪浴栽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天轿偎,我揣著相機與錄音典鸡,去河邊找鬼。 笑死坏晦,一個胖子當著我的面吹牛萝玷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播英遭,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亦渗!你這毒婦竟也來了挖诸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤法精,失蹤者是張志新(化名)和其女友劉穎多律,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搂蜓,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡狼荞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了帮碰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片相味。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖殉挽,靈堂內(nèi)的尸體忽然破棺而出丰涉,到底是詐尸還是另有隱情,我是刑警寧澤斯碌,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布一死,位于F島的核電站,受9級特大地震影響傻唾,放射性物質(zhì)發(fā)生泄漏投慈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伪煤。 院中可真熱鬧加袋,春花似錦、人聲如沸带族。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝙砌。三九已至阳堕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間择克,已是汗流浹背恬总。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肚邢,地道東北人壹堰。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像骡湖,于是被迫代替她去往敵國和親贱纠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,566評論 2 349

推薦閱讀更多精彩內(nèi)容