圖文|娘酷
上一篇文章中我介紹了Web Scraper的基本用法,接下來(lái)的內(nèi)容中,我將接著介紹Web Scraper在收集多層級(jí)的數(shù)據(jù)的進(jìn)階套路。
進(jìn)階套路
仍然以我的簡(jiǎn)書關(guān)注列表為例,這一次我不僅想要收集我都關(guān)注了誰(shuí),我還想要他們的一些個(gè)人信息,如:他們的粉絲數(shù),關(guān)注數(shù),文章數(shù),一共寫過(guò)多少字。

我的關(guān)注列表中有96張如圖所示的卡片,我們暫且稱之為名片。每張名片中包含了此人的多維度信息,頭像、網(wǎng)名、關(guān)注數(shù)、粉絲數(shù)、文章數(shù)、寫了多少字,獲得了多少個(gè)喜歡,甚至還可以算上單擊他網(wǎng)名跳轉(zhuǎn)的個(gè)人主頁(yè)的鏈接。那么這里,就存在一個(gè)二級(jí)包含關(guān)系,名片是要收集的一級(jí)對(duì)象,而名字,粉絲數(shù),關(guān)注數(shù)則是二級(jí)對(duì)象。而像名片這樣在頁(yè)面中存在多個(gè),自己本身也包含多個(gè)二級(jí)對(duì)象的目標(biāo),我們稱其為元素。抓取時(shí)Type選擇為Element。

新建:shift+ctrl+I 喚出開(kāi)發(fā)者工具 -> Web Scraper -> Create New Sitemap -> Sitemap Name:niangkufollowers; sitemap URL: http://www.itdecent.cn/users/f354e815185f/following
添加元素對(duì)象(element):元素就像是一個(gè)書包內(nèi)部可以包含多個(gè)目標(biāo),所以此處為了收集每個(gè)人的相關(guān)信息,將每一個(gè)名片看做一個(gè)元素。創(chuàng)建Selector,Type設(shè)定為Element,單擊“select”按鈕后,將鼠標(biāo)移至名片處,選中第一個(gè)和第二個(gè)名片后,WS會(huì)自動(dòng)圈起頁(yè)面上其他名片(這個(gè)頁(yè)面上有多個(gè)名片記得要勾選multiple)。Done Selecting! -> Save Selector

添加元素內(nèi)二級(jí)目標(biāo):?jiǎn)螕鬍lement -> 依次添加二級(jí)目標(biāo)(Add New Selector ):網(wǎng)名(name), 關(guān)注數(shù)(following),粉絲數(shù)(follower),文章數(shù)(posts),字?jǐn)?shù)(counts)。類型全部選擇“Text”。因?yàn)槊總€(gè)元素內(nèi)都只含有一個(gè)網(wǎng)名,則不用勾選multiple。添加過(guò)程參照 基礎(chǔ)套路

有時(shí)想要選中的目標(biāo)是帶有跳轉(zhuǎn)連接的,如本例中的網(wǎng)名,單擊后會(huì)跳轉(zhuǎn)就無(wú)法在selector中保存,這里的小技巧是,可以在“Done Selecting!”按鈕左側(cè)單擊“Enable key”,就可以使用鍵盤進(jìn)行操作。將鼠標(biāo)移至對(duì)象上,單擊鍵盤S鍵,就可以選中了。
讓我們?cè)倥酪淮?!不用設(shè)置delay直接啟動(dòng)!Sitemap(niangkufollowers) -> Scrape?

YEAH!我們有了更多維度的數(shù)據(jù)
雖然我們有了更多維度的數(shù)據(jù),但仍結(jié)果只有9個(gè)。如果我們想要跟多的數(shù)據(jù)該怎么辦?仔細(xì)看一下這個(gè)網(wǎng)頁(yè),你會(huì)發(fā)現(xiàn),它的加載方式是:滑到底部時(shí)會(huì)自動(dòng)加載9條名片。滑動(dòng)時(shí)加載,是動(dòng)態(tài)加載的一種方式。除了滑動(dòng)加載,還有點(diǎn)擊更多按鈕加載,點(diǎn)擊頁(yè)碼加載。只有解決了網(wǎng)頁(yè)的加載,讓網(wǎng)頁(yè)順順利利的把數(shù)據(jù)吐出來(lái),我們才能完成完整的收集。
滑動(dòng)加載
點(diǎn)擊Sitemap(niangkufollowers) -> Selectors ->點(diǎn)擊"Edit"編輯一級(jí)元素

果斷把element的type改成“Element scroll down”


這個(gè)Delay的意思就是讓它向下滾動(dòng)的時(shí)候等一會(huì),滾太快抓不完就GG了,有時(shí)候抓太快也會(huì)觸發(fā)網(wǎng)頁(yè)的防爬蟲(chóng)機(jī)制就直接把你的網(wǎng)頁(yè)關(guān)了。所以慢一點(diǎn)等一會(huì)效果更好噢。
讓我們?cè)僭囈淮?!Scrape!

YESSSSS! 搞定!
讓我們?cè)賮?lái)看看其他加載方式下該如何操作呢
頁(yè)碼加載
當(dāng)你想要抓取的頁(yè)面地址帶有頁(yè)碼的時(shí)候,處理辦法在大欣的回答里有體現(xiàn),直接加上你要抓取頁(yè)數(shù)就好了。如:
https://www.zhihu.com/people/amuro1230/followers?page=2
其他步驟操作方法如上,只用在新建sitemap時(shí)將地址改寫為:https://www.zhihu.com/people/amuro1230/followers?page=[1-69],蟲(chóng)蟲(chóng)就會(huì)自動(dòng)翻頁(yè)至第69頁(yè)時(shí)結(jié)束

點(diǎn)擊加載
有些頁(yè)面的加載方式是地址不變,點(diǎn)擊頁(yè)碼,或者固定按鈕如“下一頁(yè)”,“點(diǎn)擊加載”等進(jìn)行加載。那么這里也分為兩類情況來(lái)討論:只點(diǎn)擊一次(如數(shù)字頁(yè)碼每個(gè)頁(yè)碼只點(diǎn)擊一次),和點(diǎn)擊多次(如多次點(diǎn)擊同一個(gè)翻頁(yè)按鈕)
點(diǎn)擊一次(Click Once)
我們以蝦米上煙鬼的新歌Sick boy這首歌為例,講一下如何收集蝦米音樂(lè)的歌曲頁(yè)面下方的評(píng)論列表內(nèi)容。
http://www.xiami.com/album/9cCZb9eaeb8?spm=a1z1s.6843761.1478643713.4.mAVSas

可以看到評(píng)論仍然是呈卡片式的,可以設(shè)置為元素類型,每個(gè)卡片包含網(wǎng)名,時(shí)間,評(píng)論,贊數(shù),弱數(shù)。 抓取評(píng)論的邏輯是:先逐條抓下該頁(yè)的卡片,然后點(diǎn)擊下一個(gè)頁(yè)碼,再重復(fù)以上動(dòng)作。點(diǎn)擊下一個(gè)頁(yè)碼意味著:2,3,4依次點(diǎn)擊,對(duì)象唯一且只點(diǎn)擊一次。我們先按照進(jìn)階套路中的步驟設(shè)置好element和二級(jí)目標(biāo)。

然后按照滑動(dòng)加載中步驟,進(jìn)入element編輯頁(yè)面,將type修改為element click。

Selector的設(shè)置方法與上述元素的選擇相同(如果是如上述步驟進(jìn)行修改到這一步的,則不用重新選擇)
在Click Selector處將頁(yè)碼依次選上,同時(shí)下方勾選multiple;Click type 點(diǎn)擊類型為點(diǎn)擊一次,即選中的對(duì)象每個(gè)只點(diǎn)擊一次;Click element uniqueness 點(diǎn)擊對(duì)象的唯一性中選擇唯一文本,即每個(gè)數(shù)字只出現(xiàn)一次;delay 延遲設(shè)置為2000.
讓我們?cè)囈淮?!Scrape!

ヾ(?°?°?)??完美
點(diǎn)擊多次(Click More)
在以上抓取蝦米音樂(lè)評(píng)論的邏輯是順序單擊每個(gè)頁(yè)碼,我們也可以采取另一種方法,多次點(diǎn)擊“下一頁(yè)”這一個(gè)按鈕,直到這個(gè)網(wǎng)頁(yè)沒(méi)有更多新內(nèi)容。這種方法適用于沒(méi)有頁(yè)碼按鈕,只有“下一頁(yè)”或者“查看更多”按鈕時(shí)的狀況,比如:

本例選擇了絕對(duì)伏特加的廣告頁(yè)面(不知道網(wǎng)址是否永久):
http://absolutnights.cn/100nights/
目標(biāo)仍然為收集卡片上的信息:地址,標(biāo)題,內(nèi)容,點(diǎn)贊數(shù),評(píng)論數(shù)等等。Element和二級(jí)目標(biāo)的設(shè)置參照上述步驟。
進(jìn)入element編輯頁(yè)面,將type修改為element click -> Click Selector 選擇“查看更多”按鈕 -> Click type選擇Click more -> Delay 設(shè)置為2000 -> Save !!

然我們來(lái)看一下結(jié)果。

以上。
到這里,相信大家已經(jīng)可以處理大部分的網(wǎng)頁(yè)了,下一期我將具體介紹每種類型的選擇器的應(yīng)用場(chǎng)景(Selector),大家就會(huì)在設(shè)置蟲(chóng)蟲(chóng)的過(guò)程中更加得心應(yīng)手了。