方法一:powerbi爬取安居客
不得不佩服powerbi脆粥,真是入得洞房(你沒看錯砌溺,就是洞房,不是廚房)变隔、上得廳堂规伐,除了能夠連接一百多種數(shù)據(jù)源,居然還是一個好用的爬蟲匣缘。
第一步:確保power bi desktop是最新版并打開它猖闪。
第二步:在安居客網(wǎng)站找到昆明新房源的鏈接,復(fù)制備用肌厨。
第三步:新建一個來自于web的數(shù)據(jù)源培慌。
注意上圖中的位置3,要點擊“使用示例添加表”柑爸。
第四步:手動添加需爬取的字段吵护。
如上圖所示,我們想爬取的第一個字段是樓盤名字,我們在“列1”第一行中手動輸入想爬取的第一個樓盤名字何址。確保一一對應(yīng)里逆。
當(dāng)你輸入開頭幾個字時,powerbi desktop會智能地提示用爪,雙擊提示原押,就會自動填充。
絕大多數(shù)時候偎血,我們輸入第一個樓盤名字之后诸衔,powerbi desktop就會智能地幫我們把其他樓盤名字依次填到“列1”。
如上圖所示颇玷,灰色部分為powerbi desktop自動填充的笨农。
如果輸入第一個樓盤后,powerbi desktop沒有自動填充其他樓盤帖渠,不用擔(dān)心谒亦,這是因為power bi desktop還沒找到規(guī)律,所以當(dāng)你再寫一個樓盤名字后空郊,它就知道該怎么填充了份招。
點紅圈處的*號可以增加爬取的字段列。雙擊列名稱可以重命名狞甚,比如我將列重命名為“樓盤名稱”锁摔、“價格”和“戶型”。
確保所有要爬取的字段都列出來之后哼审,點擊確定谐腰,進入下一步。
第五步:加載或編輯爬取結(jié)果涩盾。
上一步確定后十气,進入上圖的界面,點擊“加載”旁赊,就可以查看爬取結(jié)果了桦踊。如果對自動抓取的結(jié)果不滿意,可以點“編輯”终畅,進入編輯查詢界面籍胯,對查詢語句進行修改。
第六步:翻頁离福。
注意我們前面爬取的只是一頁內(nèi)容杖狼。一頁只有幾十個樓盤。昆明可是有幾百個樓盤的妖爷,安居客用了8頁來顯示蝶涩,因此理朋,我們需要確保能把八頁內(nèi)容全部爬取下來。
所以我們在上一步點擊“編輯”绿聘,進入查詢編輯頁面嗽上。
這里我們要分四步走:
首先是把剛才建立的查詢重命名下,便于識別熄攘,比如我重命名為“base”兽愤。
其次要拿到總頁數(shù),這個好辦挪圾。在左側(cè)查詢列表欄右鍵點擊浅萧,新建一個空白查詢。
然后在公式欄輸入“= {1..8}”哲思,這表示新建一個包含1到8共8個元素的列表洼畅。列表不好操作,所以我們把它轉(zhuǎn)化成表棚赔,在窗口左上角點“到表”帝簇。再把列格式設(shè)置為文本。
接著我們要把base變成一個函數(shù)忆嗜。因為只有函數(shù)才能調(diào)用變量己儒,而變量就是我們剛才做的表格里的8個頁碼數(shù)字。
點擊菜單欄上的“管理參數(shù)”捆毫,新建一個page參數(shù)。
然后把base查詢的第一個操作步驟代碼變成“= Web.BrowserContents("https://km.fang.anjuke.com/loupan/all/p" & page & "/")”
再右鍵選中base冲甘,在彈出菜單中選擇“創(chuàng)建函數(shù)”(下面截圖中是灰色的绩卤,是因為我已經(jīng)用它創(chuàng)建了一個函數(shù))。
最后一步就是在頁碼表格中以新增一列的方式引用剛才創(chuàng)建的函數(shù):
然后點擊自定義列列標(biāo)題旁邊的展開符號濒憋,展開列,就得到我們想要的數(shù)據(jù)了:
第七步:查看爬取結(jié)果凛驮。
上圖就是我們爬取的結(jié)果,可以把它加載到數(shù)據(jù)模型条辟,進行下一步處理黔夭,如統(tǒng)計匯總,或?qū)С鰹閏sv格式發(fā)給領(lǐng)導(dǎo)羽嫡。
看上去步驟繁多本姥,但是對powerbi desktop操作熟悉的話,其實就是分分鐘的事情杭棵。
實際操作中主要耗時在爬取網(wǎng)頁內(nèi)容上婚惫。
尾巴
上面的七步其實爬取的是樓盤列表頁的樓盤信息。實際任務(wù)中我需要爬取每個樓盤頁面上的信息。其實思路都是一樣的:先爬取單個樓盤頁面的信息先舷,然后將其轉(zhuǎn)化為函數(shù)備用艰管;獲取到樓盤的鏈接地址,將其作為參數(shù)傳遞給函數(shù)蒋川;而樓盤頁面地址就可以直接從樓盤列表頁中獲取蛙婴。所以我沒有繼續(xù)往下寫具體的操作步驟了。
爬蟲老手應(yīng)該也注意到了尔破,我沒設(shè)置headers街图,也沒有設(shè)置等待時間,然而并沒有觸發(fā)安居客的反爬機制懒构,不知道powerbi desktop在背后怎么避免了觸發(fā)反爬機制餐济,或者只是我運氣好?