數(shù)據(jù)爬蟲(chóng)入門(mén)與進(jìn)階

說(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)

選中大層級(jí)元素

保存好外層選擇器后,點(diǎn)擊選擇器,進(jìn)入子選擇器頁(yè)面,再次add selector,添加子層選擇器。

選中子層級(jí)元素

添加了多個(gè)子層選擇器后,可以預(yù)覽一下效果是否如你所愿。

多個(gè)選擇器可以先預(yù)覽效果


抓取得到的元素結(jié)果集預(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指向大元素


新建一個(gè)click selector,指向加載更多元素


在上面的基礎(chǔ)上,新建一個(gè)子選擇器,選擇公司名所在的元素


子選擇器按一般的規(guī)則來(lái),text類(lèi)型,非multiple,selector選中標(biāo)題文本

結(jié)束上述步驟后抓取就可以了。抓取的速度有時(shí)會(huì)很慢,需要耐心等待。

抓取的結(jié)果示意圖,可保存成csv

(3)快捷鍵抓取

點(diǎn)擊selector選擇元素后,點(diǎn)擊Enable Key開(kāi)啟鍵盤(pán)操作,鼠標(biāo)懸停,等采集字段變綠后按鍵盤(pán):S=選中;P=父類(lèi);C=子類(lèi)。

可通過(guò)鍵盤(pán)的S,P,C進(jìn)行鼠標(biāo)懸停選取

(4)用鏈接采集二級(jí)三級(jí)頁(yè)面

按Element方法圈好要抓取的元素大類(lèi)。

element類(lèi)型的抓取

抓取子元素招股說(shuō)明書(shū)名稱(chēng)。type為text類(lèi)型

在element類(lèi)型大類(lèi)中,抓取說(shuō)明書(shū)名稱(chēng)子類(lèi)

再抓取一個(gè)子類(lèi),招股說(shuō)明書(shū)發(fā)布的日期。type為text類(lèi)型

在element類(lèi)型大類(lèi)下抓取日期子類(lèi)

接下來(lái)抓取列表的三級(jí)頁(yè)面鏈接,注意新建的選擇器type為link類(lèi)型。

在Element大類(lèi)下,抓取頁(yè)面的鏈接子類(lèi)

要抓取的類(lèi)的層級(jí)結(jié)構(gòu)如下:

downfile為大類(lèi)選擇器名稱(chēng),此圖中展示的是大類(lèi)下的三個(gè)要抓取的子類(lèi)

以上就緒之后,我們還需要在三級(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)的下載按鈕即可。

明細(xì)頁(yè)面新建一個(gè)link類(lèi)型的選擇器,選擇頁(yè)面的下載按鈕
層級(jí)關(guān)系

以上都設(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)行下載。

下載的CSV數(shù)據(jù)文件

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

抓取table的頭和數(shù)據(jù)子類(lèi)

至此,數(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://www.cninfo.com.cn/cninfo-new/fulltextSearch?code=?autosubmit=&keyWord=%E6%8B%9B%E8%82%A1%E8%AF%B4%E6%98%8E%E4%B9%A6

麥淘

http://m.maitao.com/classify/null?ids=1

IT桔子

https://www.itjuzi.com/search?key=%E4%BA%B2%E5%AD%90

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,143評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,553評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,620評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,416評(píng)論 6 405
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,940評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,170評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,709評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,597評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評(píng)論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,029評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,407評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,663評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,403評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,746評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容