說(shuō)明:本文章內(nèi)容學(xué)習(xí)自“三 節(jié) 課”平臺(tái)的《人人都能學(xué)會(huì)的數(shù)據(jù)爬蟲(chóng)課》。
產(chǎn)品和運(yùn)營(yíng)工作中,經(jīng)常需要做出大量的決策,在很多時(shí)候決策的做出是需要靠數(shù)據(jù)進(jìn)行支撐的,數(shù)據(jù)能夠讓我們避免自己的主觀判斷。
如何獲取到未經(jīng)行業(yè)機(jī)構(gòu)處理過(guò)的數(shù)據(jù),拿到熱乎的一手資料呢?爬蟲(chóng),能實(shí)現(xiàn)大部分(80%)的網(wǎng)站數(shù)據(jù)的抓取。
一、爬蟲(chóng)的應(yīng)用場(chǎng)景
1、爬蟲(chóng)(網(wǎng)絡(luò)爬蟲(chóng)/spider/數(shù)據(jù)抓取):自動(dòng)抓取萬(wàn)維網(wǎng)的程序或腳本。
2、常見(jiàn)應(yīng)用場(chǎng)景和功能
(1)市場(chǎng)營(yíng)銷(xiāo)
a、搜索引擎優(yōu)化(Search Engine Optimization):獲取本品和競(jìng)品排名,優(yōu)化搜索引擎方案。
b、市場(chǎng)研究(Market Research):市場(chǎng)容量的研究和市場(chǎng)行業(yè)趨勢(shì)的變化。
c、潛在客戶(hù)/線索(Lead Generation):對(duì)知乎等各種話(huà)題關(guān)注者,微博粉絲進(jìn)行定向推送。
(2)競(jìng)品分析
a、輿情分析(Reviews and Sentiments):社交媒體/購(gòu)物網(wǎng)站里評(píng)論里收集反饋與輿情分析。
b、競(jìng)品社交媒體發(fā)布及其粉絲(Content Approach and Followers):競(jìng)品最近發(fā)布了什么內(nèi)容,轉(zhuǎn)化粉絲。
c、價(jià)格對(duì)照(Price Comparison):根據(jù)CPI(居民消費(fèi)價(jià)格指數(shù))價(jià)格動(dòng)態(tài)波動(dòng)。
d、變化檢測(cè)(Change Detection):競(jìng)品促銷(xiāo),價(jià)格變化,品類(lèi)擴(kuò)充。
(3)職業(yè)發(fā)展與個(gè)人生活
a、求職招聘(Job Hunting and Recruiting):求職者定向求職,Hr定向挖人。
b、產(chǎn)品和服務(wù)(Products and Services):比較價(jià)格和口碑。
c、財(cái)務(wù)規(guī)劃(Financial Planning):證券專(zhuān)家的評(píng)論。
d、買(mǎi)/租/賣(mài)(Looking to Buy/Rent/Sell)。
二、常見(jiàn)抓取工具
1、excel。(簡(jiǎn)單的table布局適用)
2、第三方工具:火車(chē)頭,八爪魚(yú)。
3、web Scraper。
4、Python Scraper。
三、Excel抓取簡(jiǎn)單的數(shù)據(jù)
操作步驟說(shuō)明
1、打開(kāi)可抓取的網(wǎng)頁(yè),F(xiàn)12檢查元素,NetWork項(xiàng),選擇Filter,刷新重新加載頁(yè)面,得到對(duì)應(yīng)的xml文件,右鍵 open in new tab就可以看到相應(yīng)網(wǎng)站內(nèi)所有要抓取的信息。
2、打開(kāi)Excel,選擇數(shù)據(jù)標(biāo)簽頁(yè),點(diǎn)擊自網(wǎng)站,輸入要抓取的信息網(wǎng)址,黃色標(biāo)記點(diǎn)綠,加載完后點(diǎn)擊導(dǎo)入即可。
Excel作為抓取工具的總結(jié):
1、用excel的學(xué)習(xí)成本較低,上手快;
2、可以用excel的一些工具對(duì)數(shù)據(jù)進(jìn)行操作,比如上圖中的全部刷新(實(shí)時(shí)獲取網(wǎng)站數(shù)據(jù)),以及分列,合并計(jì)算等小工具的使用;
3、局限性較大,只能對(duì)一些老的以table布局的網(wǎng)站起作用。
四、爬蟲(chóng)插件 web Scraper
能翻墻的請(qǐng)直接在谷歌應(yīng)用商店,搜索webscraper,添加擴(kuò)展程序,自動(dòng)安裝好后就可以直接使用了。不能翻墻的請(qǐng)自行百度。
1、頁(yè)面可視范圍內(nèi)基本元素的抓取
新建站點(diǎn)地圖create new sitemap(import sitemap 需要用到JSON格式的特殊代碼),選擇multiple,再點(diǎn)擊select,點(diǎn)選頁(yè)面要選中的元素,點(diǎn)選兩個(gè)之后,插件就可以自動(dòng)識(shí)別到所有要點(diǎn)選的同類(lèi)元素。(從代碼的角度設(shè)想該插件的原理應(yīng)該是,批量獲取頁(yè)面中同種級(jí)別元素內(nèi)的text文本內(nèi)容)
建好選擇器之后,我們就可以預(yù)覽各種效果,然后可以開(kāi)始抓取了:點(diǎn)擊Scrape,直接Start Scraping,抓取完畢之后會(huì)有成功的提示,此時(shí)我們可以把抓取好的數(shù)據(jù),選擇是否導(dǎo)出(點(diǎn)擊Export Date As CSV)。
此方法只能下載一個(gè)頁(yè)面初始加載時(shí)的數(shù)據(jù)量。這個(gè)不難想象,因?yàn)轫?yè)面的數(shù)據(jù)是由鼠標(biāo)滾輪滾動(dòng)時(shí)訪問(wèn)數(shù)據(jù)庫(kù)進(jìn)行頁(yè)面加載的,元素的內(nèi)容都是頁(yè)面事件觸發(fā)后生成的,所以獲取不到。
開(kāi)個(gè)腦洞:如果能寫(xiě)個(gè)腳本,讓程序自動(dòng)觸發(fā)鼠標(biāo)的滾動(dòng)事件,那是不是就能獲取到更多呢?
2、分頁(yè)的所有元素抓取
元素分頁(yè)的規(guī)律性,對(duì)要抓取的網(wǎng)頁(yè)page進(jìn)行限定。
對(duì)新建的站點(diǎn)地圖進(jìn)行編輯,Edit Metadata,對(duì)照url上呈現(xiàn)的翻頁(yè)規(guī)則,將Start URL里對(duì)應(yīng)的翻頁(yè)規(guī)則進(jìn)行改變。規(guī)則是:[想抓取的初始頁(yè)碼值-想抓取得結(jié)束頁(yè)碼值:頁(yè)碼差值]。
比如豆瓣這個(gè)網(wǎng)頁(yè)的翻頁(yè)規(guī)律是start參數(shù)依次加25,等差數(shù)列,差值為25,所以可以寫(xiě)成:
https://movie.douban.com/top250?start=[0-500:25]&filter=
一般規(guī)律為page,一頁(yè)一頁(yè)加法,所以寫(xiě)成 page=[1-23]
建好之后,遵照 1、的方法,新建selector,最后進(jìn)行scrape就可以了。
3、多元素抓取---進(jìn)階
(1)、一個(gè)頁(yè)面如何抓取多個(gè)元素呢?
(2)、現(xiàn)今流行的滾動(dòng)或交互式動(dòng)態(tài)加載(不規(guī)則分頁(yè))模式下又該如何抓取元素內(nèi)容呢?
(3)、快捷鍵快速選中某個(gè)元素;
(4)、用鏈接采集二級(jí)三級(jí)頁(yè)面;
(5)、抓取圖片和表單的方法;
概念總結(jié):以上各種方法其實(shí)根據(jù)的原理都是頁(yè)面元素,模擬瀏覽器事件,對(duì)瀏覽器加載出來(lái)的頁(yè)面中的元素內(nèi)容或者資源進(jìn)行提取。
4、詳細(xì)進(jìn)階方式(80%)
(1)一個(gè)頁(yè)面抓取多個(gè)元素(一般是相關(guān)聯(lián)的元素)
同之前的例子,先新建一個(gè)站點(diǎn)地圖。
為此站點(diǎn)新建一個(gè)選擇器,type為element,Multiple多選,選中所有大標(biāo)簽,done selecting后可預(yù)覽一下選中的項(xiàng)
保存好外層選擇器后,點(diǎn)擊選擇器,進(jìn)入子選擇器頁(yè)面,再次add selector,添加子層選擇器。
添加了多個(gè)子層選擇器后,可以預(yù)覽一下效果是否如你所愿。
最后,就可以用之前的招數(shù),開(kāi)始進(jìn)行scrape抓取,生成csv了。
(2)不規(guī)律分頁(yè)的抓取
初始步驟同上,新建站點(diǎn)地圖,再新建選擇器,如下圖,選擇好要抓取的元素,選擇好需要瀏覽器自動(dòng)執(zhí)行點(diǎn)擊事件的元素“加載更多”,點(diǎn)擊類(lèi)型選擇click more,告訴瀏覽器要一直加載完成方能結(jié)束,click element uniqueness 告訴瀏覽器,當(dāng)點(diǎn)擊選擇器變成什么樣子了就不需要再繼續(xù)進(jìn)行了,一般有 unique text(文本變化),html + text(網(wǎng)址或文本變化),html (網(wǎng)頁(yè)變化),css selecor(選擇器的樣式變化)。
新建一個(gè)Multiple屬性的Element click類(lèi)型,selector指向大元素
結(jié)束上述步驟后抓取就可以了。抓取的速度有時(shí)會(huì)很慢,需要耐心等待。
(3)快捷鍵抓取
點(diǎn)擊selector選擇元素后,點(diǎn)擊Enable Key開(kāi)啟鍵盤(pán)操作,鼠標(biāo)懸停,等采集字段變綠后按鍵盤(pán):S=選中;P=父類(lèi);C=子類(lèi)。
(4)用鏈接采集二級(jí)三級(jí)頁(yè)面
按Element方法圈好要抓取的元素大類(lèi)。
抓取子元素招股說(shuō)明書(shū)名稱(chēng)。type為text類(lèi)型
再抓取一個(gè)子類(lèi),招股說(shuō)明書(shū)發(fā)布的日期。type為text類(lèi)型
接下來(lái)抓取列表的三級(jí)頁(yè)面鏈接,注意新建的選擇器type為link類(lèi)型。
要抓取的類(lèi)的層級(jí)結(jié)構(gòu)如下:
以上就緒之后,我們還需要在三級(jí)頁(yè)面中設(shè)置一個(gè)link選擇器。
打開(kāi)三級(jí)頁(yè)面(選擇一個(gè)招股說(shuō)明書(shū)點(diǎn)擊打開(kāi)新頁(yè)面),在上一次設(shè)置的link選擇器的子級(jí),新建一個(gè)選擇器,type為link,鏈接到對(duì)應(yīng)的下載按鈕即可。
以上都設(shè)置完成后,即可點(diǎn)擊進(jìn)行抓取。
抓取的過(guò)程中,插件會(huì)自動(dòng)將頁(yè)面的二級(jí)三級(jí)頁(yè)面依次打開(kāi),并進(jìn)行抓取,抓取完成后生成的是一個(gè)帶有下載鏈接的數(shù)據(jù)包。此時(shí)我們可以通過(guò)迅雷或者QQ旋風(fēng)批量下載功能,對(duì)需要的文件進(jìn)行下載。
Q:link類(lèi)型和Element Click等類(lèi)型有什么區(qū)別?
A:以上兩種類(lèi)型都能進(jìn)行采集二級(jí)或者三級(jí)頁(yè)面數(shù)據(jù),但,新鏈接為A標(biāo)簽時(shí),Type都可以用Link,采集URL時(shí),必須要用link類(lèi)型。非A標(biāo)簽必須要把type設(shè)為Element click等類(lèi)型才可以采集二三級(jí)頁(yè)面。
(5)抓取圖片和表單
a.抓取圖片
一般抓取圖片的鏈接再用工具進(jìn)行批量比較合適,type有為image的項(xiàng)。
b.抓取表單Table
至此,數(shù)據(jù)爬蟲(chóng)基本方法介紹完畢。
五、常見(jiàn)反爬蟲(chóng)方法。
(1)反爬蟲(chóng)常見(jiàn)手段和應(yīng)對(duì)方法:
a文件頭 user-agent檢查:訪問(wèn)設(shè)備返回?cái)?shù)據(jù)進(jìn)行檢查;
b動(dòng)態(tài)加載(Ajax Javascript等):實(shí)時(shí)更新;
c用戶(hù)行為(cookies+請(qǐng)求時(shí)間間隔):頻率太高則臨時(shí)黑名單;
d人機(jī)交互驗(yàn)證:圖形驗(yàn)證碼等;
反爬應(yīng)對(duì)方法:
web scraper用瀏覽器避免user-agent檢查,將cookies傳輸過(guò)去所以不會(huì)被檢查,是瀏覽器所以可以實(shí)現(xiàn)ajax javascript等方法,設(shè)置了時(shí)間間隔所以不會(huì)被查封。
(2)反爬中的奇葩
web scraper對(duì)于有些情況是無(wú)法抓取的。
比如
a美團(tuán)網(wǎng)網(wǎng)頁(yè)端的團(tuán)購(gòu)價(jià)格,是使用的雪碧圖(小圖片集合到大圖中,根據(jù)定位來(lái)顯示價(jià)格),頁(yè)面中無(wú)法抓取到對(duì)應(yīng)的元素,所以無(wú)法抓取到團(tuán)購(gòu)價(jià)格。但是手機(jī)端可以抓取。
b去哪兒網(wǎng)機(jī)票價(jià)格是用的元素位移,手機(jī)端用字體替換。
網(wǎng)頁(yè)端方式:1240 = 1 6 1 0 + 2 4(抓取下來(lái)用excel進(jìn)行替換,或者腳本進(jìn)行替換抓取等方法)
手機(jī)端方式:用ttf字體文件,將0123456789順序替換為0153246987。
c將結(jié)果解析為圖片。
對(duì)于這些奇葩網(wǎng)站的反爬技術(shù),需要有高超的應(yīng)對(duì)方法。
但是暫時(shí)還沒(méi)有攻略。
平臺(tái)給的作業(yè)。http://pm25.in/rank
作業(yè)進(jìn)階
麥淘
http://m.maitao.com/classify/null?ids=1
IT桔子