爬蟲學(xué)習(xí)6:爬取安居客的VR房源信息

公司的VR產(chǎn)品在推廣前夕,需要做一個(gè)較詳細(xì)的市場分析報(bào)告,我們可以從下面幾個(gè)步驟來深入探討:

1、需要展望整個(gè)VR的市場規(guī)模有多大,從而論證我們需要面對的市場分量,

2、在這個(gè)大市場下面,我們面對的細(xì)分市場,如何劃分,盤子能有多大等等

3、產(chǎn)品自身分析和競品分析,這個(gè)是認(rèn)識自己和別人的部分,從而認(rèn)識到自己的核心優(yōu)勢以及相比于其他的比較優(yōu)劣勢。

4、新機(jī)會和風(fēng)險(xiǎn),我們需要從重重競爭者中,開辟出最適合自己產(chǎn)品的細(xì)分市場,并認(rèn)識到我們自定義的細(xì)分市場可以營造哪些壁壘,其他競爭者是否容易轉(zhuǎn)型等等。

整個(gè)市場分析報(bào)告中,主要部分是2和3,2是看清楚自己面對的初步細(xì)分市場的成熟度和規(guī)模,3是看清楚自己與競品的市場存量存在多大的差距。無疑,這些都需要數(shù)據(jù)來支撐。扯得有點(diǎn)遠(yuǎn),回歸爬蟲學(xué)習(xí),因?yàn)槲覀冃枰碫R在房地產(chǎn)市場上的普及度和成熟度,所以我們需要考察線下線上中介平臺對VR的支持和了解。這也能從側(cè)面反饋出客戶對房地產(chǎn)VR的接受程度。

下面書歸正傳,開始走拉取安居客房源的深坑之路。

首先我們看安居客的房源列表的代碼,發(fā)現(xiàn)每個(gè)房源信息都包含在一個(gè)<li>模塊里,那么我們是否可以直接如圖拉取小說的內(nèi)容一樣requests.get()呢?:


我先試著模仿小說爬蟲拉取安居客第一頁房源列表的數(shù)據(jù),敲下如下代碼:

運(yùn)行后的確拉出代碼行了,但再運(yùn)行一次,發(fā)現(xiàn)拉出來的是空值。而且安居客會觸發(fā)預(yù)警機(jī)制,房源頁面無法顯示,還蹦出這么一行字:


WTF?這是什么鬼東西!沮喪了一波,好吧,既然你能檢測到我在爬你的數(shù)據(jù),那說明我還是小白,大神總是有辦法繞過這些檢測機(jī)制的,而且安居客的數(shù)據(jù)應(yīng)該也不多么有保護(hù)價(jià)值,防爬蟲的機(jī)制應(yīng)該不難。翻看大神的文章,發(fā)現(xiàn)一般網(wǎng)站防止爬蟲一般從下列幾個(gè)路徑去實(shí)現(xiàn):

1、服務(wù)器限制了UA頭(user-agent),因?yàn)槲覀冊谥苯邮褂胷equests.get()的時(shí)候,服務(wù)器接收不到任何的UA頭,那么它就默認(rèn)你是爬蟲,因?yàn)檎5木W(wǎng)頁訪問,是一定會帶UA頭等信息的,這個(gè)UA頭在哪找呢?如下:


我們通過查看頁面加載的network,然后再看js加載項(xiàng)中的headers,我們就能看到最后Request Headers的內(nèi)容中,有一項(xiàng)即User-Agent。我們把它寫入我們的requests語句即可。

2、也有的網(wǎng)站還監(jiān)測訪問頻率和ip,那么我們可以讓我們的訪問頻率盡量擬人化,比如100ms才去拉一次數(shù)據(jù),ip的話,我們可以用ip池的概念,這個(gè)沒研究,到時(shí)候再深入。

3、還有些網(wǎng)站采取什么驗(yàn)證碼、異步加載等等手段來防止爬蟲...大神們都已經(jīng)解決了,以后碰到了再請教吧。(資料來源:https://jingyan.baidu.com/article/ea24bc39c1e777da62b33198.html)

根據(jù)上面所述,我們試著這樣寫:

再試了一下,發(fā)現(xiàn)ok了,安居客不會檢測到我們爬去數(shù)據(jù)了哈哈,現(xiàn)在開始爬取數(shù)據(jù)的歷程。

首先老一套,先import我們需要的庫,主要是requests和BeautifulSoup庫,然后再引入html5lib,這個(gè)是BeautifulSoup需要的(報(bào)錯(cuò)提示要安裝這個(gè)...)。然后我們定義一個(gè)類,用來包含所有的函數(shù),然后初始化我們最后excel表里的所以度量值。


然后我們準(zhǔn)備拉取安居客前10頁的房源,我們發(fā)現(xiàn)網(wǎng)頁上的地址只是改變了‘p’后面的值而已,第一頁就是p1,第二頁就是p2.那么我們就可以定義一個(gè)提供網(wǎng)址的函數(shù)UrlChange(),然后我們知道,房源都包含在每個(gè)頁面上的<li>標(biāo)簽內(nèi),class屬性是“l(fā)ist-item”,我們先把這些房源列表抓出來,然后后面再分開處理。

然后我們來定義一個(gè)函數(shù),看這個(gè)房源到底有沒有VR的數(shù)據(jù):

這里可以優(yōu)化部分代碼,其實(shí)A里面一直都只有一個(gè)VrResult值,我們就無需去for ... in A了。直接用A[0]去與None比較即可。不過問題不大。這樣我們能找到哪些房源有VR,哪些沒有。下面我們開始爬取房源的各項(xiàng)屬性和價(jià)格。

最后我們就能拉取到安居客房源的大部分房源信息,現(xiàn)在我們再把信息寫入xlsx文檔中,也就是excel文檔中以備用。

最后我們實(shí)例化我們設(shè)定的class,然后逐步運(yùn)行其中的函數(shù)

看著中間的print被一一打印出來,還是有點(diǎn)小激動~

最開始不知道生成的excel文件去了哪,還以為失敗了...后來全盤搜索,發(fā)現(xiàn)在python自己放py文件的地方...

啦啦啦,出來啦,打開瞅瞅


開心~,爬取安居客VR房源的數(shù)據(jù)就這樣,照樣子,我們也把其他房地產(chǎn)平臺的數(shù)據(jù)爬取下來。今兒就到這

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容