寫在前面
如果你不會(huì) python ,不會(huì)爬蟲,甚至完全不會(huì)編程的話,建議你先去看看這個(gè)系列博客的前兩章。否則就算看完了這一篇,你也不知道怎么爬取競(jìng)品的數(shù)據(jù)。
產(chǎn)品經(jīng)理想要什么數(shù)據(jù)?
作為產(chǎn)品經(jīng)理,我們經(jīng)常要面對(duì)很多數(shù)據(jù)。比如自己產(chǎn)品的各種用戶量、 PV、UV、DAU ···,然后根據(jù)這些數(shù)據(jù)做出相應(yīng)的產(chǎn)品策略調(diào)整。
除了這些數(shù)據(jù)之外,我們還會(huì)想要一些其他的數(shù)據(jù),比如——競(jìng)品的數(shù)據(jù)
有一些競(jìng)品的數(shù)據(jù)是公開的,可以通過各種途徑查到,但是那些數(shù)據(jù)主要在戰(zhàn)略層面具有意義,在一些細(xì)節(jié)上沒什么參考價(jià)值。
因此,有時(shí)候,我們需要自己通過一些方法去獲取一些競(jìng)品的數(shù)據(jù)。
比如爬蟲。
爬蟲能獲取哪些競(jìng)品數(shù)據(jù)?
之前有說,我們幾乎能獲得一切網(wǎng)站或者APP上看得到的數(shù)據(jù)。
比如說:優(yōu)酷所有視頻的數(shù)量、總播放量、下載量;淘寶某商品的庫(kù)存量、月銷量;簡(jiǎn)書某專欄文章的總數(shù)量、總閱讀量、總喜歡數(shù) ···
這些都是可以通過爬蟲來獲取的,一旦運(yùn)行代碼,程序就會(huì)自動(dòng)地爬取你需要的數(shù)據(jù)。
我的初級(jí)實(shí)戰(zhàn)經(jīng)歷——「在行」相關(guān)數(shù)據(jù)爬取
在行是什么?
「在行」是國(guó)內(nèi)領(lǐng)先的知識(shí)技能共享平臺(tái)。從現(xiàn)在開始,當(dāng)你遇到任何領(lǐng)域的問題或是個(gè)性化的服務(wù)需求,都可以徑直找到“對(duì)”的人,為你答疑解惑,出謀劃策,定制服務(wù)。
我正在做的項(xiàng)目
我現(xiàn)在正在跟一群志同道合的伙伴們致力于一個(gè)“校園知識(shí)共享”以及“校園人才挖掘”的項(xiàng)目 「CampusSay校園說」 ,你可以把它理解成“校園版 在行+知乎”。
我需要「在行」的什么數(shù)據(jù)?
在行上有業(yè)界行家?guī)湍愦鹨桑@說有學(xué)姐學(xué)長(zhǎng)幫你指路。
今年八月的時(shí)候,我需要做一個(gè)平臺(tái)的勛章系統(tǒng),這個(gè)系統(tǒng)中各勛章的等級(jí)設(shè)定、用戶分布,需要按照用戶整體狀況的分布比例來確定。
由于我們的項(xiàng)目還在剛起步的階段,用戶數(shù)據(jù)還不夠成熟,于是我想看看一個(gè)成熟的競(jìng)品平臺(tái)上的用戶數(shù)據(jù)是什么樣的。所以我需要在行上所有“行家”的“交易成交數(shù)量”分布。
知道我們需要什么后,我就可以開始了。
先找到需要的數(shù)據(jù)
我需要的數(shù)據(jù)本質(zhì)是每個(gè)行家的“成交數(shù)”。
首先我先找到在行的行家列表頁(yè),發(fā)現(xiàn)在這里有我需要的數(shù)據(jù),其顯示為“XX人見過”。所以我知道了,在這個(gè)頁(yè)面里,可以爬取到我需要的數(shù)據(jù)。
查看該頁(yè)面源代碼
在這個(gè)頁(yè)面按F12,可以查看源代碼,然后通過“選擇元素”來定位到我需要的數(shù)據(jù)上,這時(shí)候就能看到這個(gè)數(shù)據(jù)相關(guān)的代碼了。
正則匹配
我之前的博客有介紹到如何爬取數(shù)據(jù),這里我用的還是很“丑陋”的“正則匹配法”。(我也正在學(xué)習(xí)一些其他的爬蟲框架,但最開始的時(shí)候接觸一下正則還是可以的)
根據(jù)剛剛獲得的源代碼,我們可以寫出一個(gè)相應(yīng)的正則匹配公式:
<p class="topic-tutor-count.*?<span>(.*?)</span>(.*?)</p>
通過這個(gè)公式,我們可以篩選出這個(gè)頁(yè)面所有的“141”這樣的數(shù)據(jù)。
對(duì)于這種簡(jiǎn)單數(shù)據(jù)的爬取,只要正則寫對(duì)了,其他一般不會(huì)有什么問題。
自動(dòng)翻頁(yè)
我需要的是在行所有行家的數(shù)據(jù)(同一地區(qū)內(nèi)),而這些數(shù)據(jù)肯定不會(huì)在一個(gè)頁(yè)面顯示完,因此我們要在爬取完一個(gè)頁(yè)面的數(shù)據(jù)后,自動(dòng)爬取下一頁(yè)的數(shù)據(jù)。
要實(shí)現(xiàn)這個(gè)需求,只要根據(jù)頁(yè)面地址的命名規(guī)律,來寫一段自動(dòng)翻頁(yè)的代碼就行。
在行列表頁(yè)第一頁(yè)的地址是:http://www.zaih.com/topics/ ,沒有看到頁(yè)數(shù)有關(guān)的命名信息。
但是我們點(diǎn)擊下一頁(yè)進(jìn)入第二頁(yè),就能發(fā)現(xiàn)地址變成了:http://www.zaih.com/topics/?page=2 。
那么,第N頁(yè)的地址,自熱就是:http://www.zaih.com/topics/?page=N
所以,我們先初始化 page = 1
,要爬取的地址為 url = 'http://www.zaih.com/topics/?page=' + str(page)
。然后每爬完一頁(yè)后,讓 page=page+1
就行
同理,要自動(dòng)切換地區(qū)等維度的方法跟自動(dòng)翻頁(yè)是一樣的。我們?cè)谂老x的時(shí)候很重要的一點(diǎn)就是要注意觀察代碼和地址的規(guī)律,程序員在設(shè)定它們的時(shí)候是會(huì)按照一定規(guī)律的。只有找到了這些規(guī)律,我們才能順著找到自己需要的東西
數(shù)據(jù)獲取后的分析
通過上面的方法,我們可以獲得在行上所有“行家”的“交易次數(shù)”。那么有了所有行家的數(shù)據(jù),我們就可以來分析這些數(shù)據(jù)了。
我想知道,超過 “1人見過”的行家、“5人見過”的行家···“100人見過”的行家占行家總數(shù)的百分比···以及諸如此類的數(shù)據(jù)分布情況。
那么這個(gè)實(shí)現(xiàn)原理就很簡(jiǎn)單了,數(shù)量達(dá)到標(biāo)準(zhǔn),相關(guān)數(shù)據(jù)“+1”就行。我們?cè)谂廊〉倪^程中就可以用代碼來實(shí)現(xiàn)。這個(gè)屬于最基礎(chǔ)的編程技術(shù),在這里就不再贅述了。
爬取結(jié)果
我把爬取的結(jié)果保存在記事本里,當(dāng)然,如果要用到復(fù)雜的數(shù)據(jù)分析時(shí),也可以直接通過 python 代碼將其保存帶 excel 里,并且直接進(jìn)行相關(guān)數(shù)據(jù)分析的操作。或者直接用 python 的相關(guān)函數(shù)來處理數(shù)據(jù),也OK
前面的數(shù)字就是爬取到的所有數(shù)據(jù),后面的則是我根據(jù)這些數(shù)據(jù)得到的數(shù)據(jù)分布情況。
我爬取到了在行北京地區(qū)所有顯示出來的行家數(shù)據(jù),有近2000個(gè)。如果我們要人工去爬取這些數(shù)據(jù)的話,需要耗費(fèi)很多的時(shí)間,而且容易出錯(cuò)。相對(duì)來說,用代碼來實(shí)現(xiàn),會(huì)快捷且精準(zhǔn)很多。
同理,你也可以用一樣的方法來爬取行家的評(píng)分、價(jià)格等數(shù)據(jù),只要稍微修改一下正則就行。
親身經(jīng)歷告訴你用計(jì)算機(jī)(代碼)來處理數(shù)據(jù)的好處
在我剛剛接手要做勛章系統(tǒng)這個(gè)任務(wù)的時(shí)候,我是不會(huì) python 和爬蟲的,因此我只能人工去爬這些數(shù)據(jù),只爬了500+就受不了了。
后來學(xué)會(huì)了爬蟲后,發(fā)現(xiàn)500+的數(shù)據(jù)跟2000+的所反映出來的情況還是差別很大的,數(shù)據(jù)量越大的會(huì)越接近真實(shí)情況(實(shí)際上爬蟲已經(jīng)爬到了可以獲取到的所有數(shù)據(jù))
PS.圖片里爬蟲爬取的數(shù)據(jù)跟我在前面【爬取結(jié)果】里貼出來的數(shù)據(jù)有一點(diǎn)不一樣,是因?yàn)榕廊〉臅r(shí)間不一樣,中間相隔了兩個(gè)月。
寫在后面
看到這里,可能你覺得你依舊寫不出一個(gè)這樣的爬蟲。因?yàn)槲也]有把每一步的代碼都貼出來,我在最后也不準(zhǔn)備把所有代碼都貼出來。
因?yàn)槲也⒉粶?zhǔn)備寫一個(gè) python 爬蟲的教程博客,而是一個(gè)產(chǎn)品經(jīng)理利用這些技術(shù)來改進(jìn)工作的經(jīng)歷分享博客。
我在這個(gè)系列博客的前兩章里貼出了我學(xué)習(xí)用的其他大牛的教學(xué)博客,我覺得我也寫不出比他們更好的教學(xué)博客。因此我只想跟大家分享一下我在做產(chǎn)品相關(guān)工作的時(shí)候,利用這項(xiàng)技術(shù)來改進(jìn)工作的想法和思路。
無論你是不是一個(gè)產(chǎn)品經(jīng)理,我都希望可以擠出一點(diǎn)時(shí)間,找一門計(jì)算機(jī)相關(guān)的技術(shù)來學(xué)習(xí)一下。相信我,利用計(jì)算機(jī)技術(shù)(包括但不限于編程),我們可以很好地改善我們的學(xué)習(xí)、工作和生活。
同時(shí),我們還會(huì)發(fā)現(xiàn)很多美好的事情。
系列目錄:
產(chǎn)品經(jīng)理學(xué)Python&爬蟲(一):為什么我要學(xué)Python
產(chǎn)品經(jīng)理學(xué)Python&爬蟲(二):Python基礎(chǔ)及爬蟲入門