首先爬蟲框架有三種
分布式爬蟲:Nutch
JAVA單機爬蟲:Crawler4j,WebMagic,WebCollector
非JAVA單機爬蟲:scrapy
第一類:分布式爬蟲優點:
海量URL管理
網速快
缺點:
Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。
用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用于精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非。
Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲。
Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來加載和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套復雜的精抽取系統了。
Nutch并沒有為精抽取提供相應的插件掛載點。Nutch的插件有只有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,并沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在“頁面解析”(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為后續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text)
用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。
Nutch2的版本目前并不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。Nutch2.3之前、Nutch2.2.1之后的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。
第二類:JAVA單機爬蟲優點:
支持多線程。
支持代理。
能過濾重復URL的。
負責遍歷網站和下載頁面。爬js生成的信息和網頁信息抽取模塊有關,往往需要通過模擬瀏覽器(htmlunit,selenium)來完成。
缺點:設計模式對軟件開發沒有指導性作用。用設計模式來設計爬蟲,只會使得爬蟲的設計更加臃腫。第三類:非JAVA單機爬蟲優點:
先說python爬蟲,python可以用30行代碼,完成JAVA
50行代碼干的任務。python寫代碼的確快,但是在調試代碼的階段,python代碼的調試往往會耗費遠遠多于編碼階段省下的時間。
使用python開發,要保證程序的正確性和穩定性,就需要寫更多的測試模塊。當然如果爬取規模不大、爬取業務不復雜,使用scrapy這種爬蟲也是蠻不錯的,可以輕松完成爬取任務。
缺點:
bug較多,不穩定。
爬蟲可以爬取ajax信息么?網頁上有一些異步加載的數據,爬取這些數據有兩種方法:使用模擬瀏覽器(問題1中描述過了),或者分析ajax的http請求,自己生成ajax請求的url,獲取返回的數據。如果是自己生成ajax請求,使用開源爬蟲的意義在哪里?其實是要用開源爬蟲的線程池和URL管理功能(比如斷點爬取)。
如果我已經可以生成我所需要的ajax請求(列表),如何用這些爬蟲來對這些請求進行爬取?爬蟲往往都是設計成廣度遍歷或者深度遍歷的模式,去遍歷靜態或者動態頁面。爬取ajax信息屬于deepweb(深網)的范疇,雖然大多數爬蟲都不直接支持。但是也可以通過一些方法來完成。比如WebCollector使用廣度遍歷來遍歷網站。爬蟲的第一輪爬取就是爬取種子集合(seeds)中的所有url。簡單來說,就是將生成的ajax請求作為種子,放入爬蟲。用爬蟲對這些種子,進行深度為1的廣度遍歷(默認就是廣度遍歷)。
爬蟲怎么爬取要登陸的網站?這些開源爬蟲都支持在爬取時指定cookies,模擬登陸主要是靠cookies。至于cookies怎么獲取,不是爬蟲管的事情。你可以手動獲取、用http請求模擬登陸或者用模擬瀏覽器自動登陸獲取cookie。
爬蟲怎么抽取網頁的信息?開源爬蟲一般都會集成網頁抽取工具。主要支持兩種規范:CSSSELECTOR和XPATH。
網頁可以調用爬蟲么?爬蟲的調用是在Web的服務端調用的,平時怎么用就怎么用,這些爬蟲都可以使用。
爬蟲速度怎么樣?單機開源爬蟲的速度,基本都可以講本機的網速用到極限。爬蟲的速度慢,往往是因為用戶把線程數開少了、網速慢,或者在數據持久化時,和數據庫的交互速度慢。而這些東西,往往都是用戶的機器和二次開發的代碼決定的。這些開源爬蟲的速度,都很可以。
css后代選擇器和子選擇器的區別介紹:
1 css后代選擇器語法:h1 em {color:red;} 表示的是從h1開始里面包含的所有的em元素變成紅色,h1為祖先,其他的em都是后代,即選中后代,不管是兒子還是孫子,只要是都會被選中,為后代選擇器。2、css子元素選擇器語法:h1>em{color:red;} 表示的是從h1開始里面的第一層em元素變成紅色,h1為祖先,em為兒子,就像世襲制一樣,只能傳給兒子,孫子和其他堂親都不行
我來講講我的故事,或許對大家編程有所啟發。
階段一:毫無章法
那應該是在 2011 年,那時我是大二,我特別喜歡編程,我雖然讀的是計算機專業,但是畢竟理論學習和社會實踐并不接軌。我學習有點著急,想趕緊進行項目實戰,那時候正直移動開發興起的時候,聽學長(其實是我現在的媳婦)說現在移動開發很火,在一線城市做 iOS 開發和 Android 開發很值錢。
我心動了,開始了提前自學之旅,從網上搜集各種關于移動開發的教學視頻,買了一個 Android 機,搜了很多各種各樣的關于 Android 開發視頻,那時候移動開發剛剛開始,但是相關資料不太多,所以,很困難,學習起來毫無章法,各種學習視頻都看,湊在一起。
學的是磕磕絆絆,學校的 Java 課還沒開,我就提前自學,看完網上的 Java 基礎視頻就投入到 Android 實戰中了,經常導錯包,看著跟視頻上敲得一模一樣,為啥我運行就有 bug 呢?
這就是階段一的情況,學的不系統,毫無章法,各種拼湊,磕磕絆絆。
階段二:強化理解,入門了
由于我暑假提前關在宿舍自學了兩周 Java 課程,也跟著視頻做過 Android 項目了,但是本質上并沒有入門,都是視頻上敲一遍,我就跟著敲一遍,理解也不夠深入。幸運的是,大二一開學 Java 課程開課了,跟著老師的教學,我又學了一遍 Java 課,由于之前自己學過,又聽老師講了一遍,對 Java 理解更深刻了,把 Java 基礎都了解透了之后,才恍然大悟,之前學的并不入門,如果不能把基礎理解透,只是比著葫蘆畫瓢,并不能舉一反三,只有真正掌握透語法,原理才能讓你舉一反三,以不變應萬變。
頓時感覺自己開悟了。
強化理解,讓我入門了,從此掌握了學習編程語言的真諦的感覺,醍醐灌頂。
說到這里,其實挺羨慕現在的人學習編程的,因為太方便了,不像我們那個年代網上學習資料和課程都很少,需要自己研究,慢慢啃,現在網上的教學課程都很系統,資料也特別多。
階段三:頓悟升級,突飛猛進
如果說階段二讓我深刻理解了學習編程的真諦是:要從基礎構建系統全面的學習體系,深刻理解基礎原理的話。那么階段三就是從源碼和開源入手,掌握編程的翅膀。
其實,像編程語言基礎的語法,數據結構,算法這類東西,還有一些計算機原理之類的知識,這些東西都是編程和實踐的根本。他們看似枯燥和基礎,但是具有最長久的生命力。這是我開悟的第一層真諦。
我自學 Android 的時候,慢慢漸入佳境,突然有一天我要實現一個非常炫酷的效果的時候,在網上搜了很久,都沒有找到解決辦法,直到看到一篇文章在講源碼,要自定義 View ,就要看 View 類的源碼,看看里面有哪些事件和方法,你要重寫這些事件或者方法,就可以實現自己想要的效果。
然后自己下載了 Android 源碼開始研究看看 View 里到底藏著什么東西?在大二,那是我第一次用 Source Insight(查看源碼的工具),看完之后,一步一步的研究,里面到底是什么?慢慢的啃,知道什么意思之后,就自己開始嘗試,最后通過繼承和重寫把自己想要的結果實現了,才發現自己的編程正在突飛猛進。
以后在遇到自定義 View ,實現炫酷效果時,基本上都難不倒我了。
突飛猛進正在開始。
后來,隨著移動開發越來越火,另外也深刻了解了 GitHub 之后,才發現,自己原來也不需要重復造輪子,很多牛人都在里面開源,而這正是為了我的編程插上了翅膀。我在遇到一些比較難的效果的時候,現在 GitHub 尋找有沒有現成的庫,如果沒有,那就自己動手寫,如果有現成的,就直接用,不用重復造輪子,那時候,我感覺編程太快了。
后來,我想既然人家開源,我為什么不開源呢?我就把自己常用的一些效果和方法進行了封裝,我也開源或者弄成工具類,等下個項目再用的時候,我就不用再寫一遍了,直接引入就可以啦。
沒錯,到這個時候,我才真正的感覺到自己的編程突飛猛進了。
我們簡單來梳理一下:
階段一:毫無章法,磕磕絆絆,它時刻在提醒我們編程要系統的去學,而不是東拼西湊,否則就是在走彎路;
階段二:強化理解基礎,從基礎原理來深刻理解編程語言才能讓你舉一反三;
階段三:深入理解系統源碼,學會看源碼,會讓你作為一個程序員有一種天生驕傲,什么效果都難不倒我,再到自己封裝工具,使用開源,讓你的效率飛速提升。
你看,其實編程如果你到了階段三,再回顧之前,你就會發現編程其實就是那么簡單。
而整個學習的歷程對我幫助很大,對于畢業后學習 Python 也起到了至關重要的作用,讓我更深一層的理解到所有的編程語言都是相通的。
在未來,是 IT 的時代,人人都會編程的時代,作為一個程序員在敲出代碼,實現出效果的那一刻,有一種天生驕傲感,感覺是這個時代的主人,這個時代由我主宰。
最后一個建議就是:大家學習一定要找對圈子,自己自學我經歷過,太痛苦,太孤獨,也太累了,遇到問題沒人商量,浸泡在不錯的圈子里一起學習,成長更快。
給大家推薦一款人人可上手的可視化工具,那就是Excel,好評度五星!
全文7688字,閱讀需要10分鐘,趕時間的朋友先點贊收藏,方便下次學習!
為什么要推薦Excel呢?
兼容性,Excel與PPT可以實現數據同步,數據修改后能直接呈現在PPT,一勞永逸。內在:Excel有5大類常規的數據可視化表達,圖表類多達13種,還可以通過自定義制作多變的數據可視化表達,滿足95%的日常辦公需求。
跟其他數據可視化工具對比,
①對比可視化網站工具,Excel擁有強大的數據分析(Excel函數,數據透視表等),而大多數在線工具只能輸入結果,而無法運算。 ②對比R、Python等,Excel對于初學者的友好高,基本2周就能大概掌握,而這些語言太難了! ③普及率高:哪臺電腦沒有裝Excel,你要表達你的觀點也容易。
想快速掌握Excel可視化表達,先了解一下可視化的全面架構:
以下就是課件內容的例子,先給同學看一下效果:
基礎圖表:《王者之星★》
三維地圖:《廣州武漢之?》
Excel控件:《520?你的名字》
《進階の圖表》
《智聯之薪》
接下來,我們從第一個開始撩:
E01.認識數據可視化數據可視化就是通過圖形,呈現出數據大小,占比,分布等特點,從而傳遞信息給大家。
下面我就用地圖簡單舉栗子吧
騰訊位置大數據https://heat.qq.com/
地圖越亮的地方代表定位次數越多的地方,這個定位跟我們人口分布一致的。
通過流量折線圖比較,我們就能直觀看出歡樂谷的應該是9點開門,19點閉門。
關于數據可視化,大家可以多去一些可視化網站看看,其實我們大多數人接觸數據可視化應該是小學、初中、高中的地理課本。
E02.Excel的數據可視化表達在Excel中常見可視化表達有五類,分別是REPT函數、條件格式、迷你圖、Excel圖表,三維地圖。
點擊獲取Excel圖表視頻教程和源文件模板★★★★★N0.1 REPT函數表達式:=REPT(text,number_times) =REPT(重復文本,重復次數)
注意重復文本要用英文狀態下引用,通過具體的實例去實戰吧~
01.給課程做數據條
表達式子:=REPT("|",C5)&C5
選擇適合的字體很重要,一般適合展示20至100的數據
02.網站流量漏斗圖
03.電影評分表
04.相親心動指數
05.人口金字塔圖
NO.2 條件格式01.突出顯示單元格規則
點擊【開始】→【條件格式】即可選擇相關的規則,突出顯示相關的單元格。
1.查找重復值,查找班里不及格的人等等
02.最前最后的規則利用前N項或者后N項,通過突出顯示快速找到對應的數據。
例如我們可以顯示數學成績高于平均分的同學、顯示各位同學最低的一門科目成績、班里成績最好的3位同學
03.圖標集許多小伙伴不知道這些小圖標是來自條件格式,導致了誤以為是圖表上的。
優點:其實這些精致的小圖標設置很簡單,通過默認的設置就能得出來。 缺點:就是精度不高,只能表示大概。圖標集分為方向、形狀、標記、等級四個歸類,根據歸類我們日常主要分別應用在
方向:表示漲↑跌↓,一般用于數據對比
形狀:一般用于分類劃分的信號
標記:用于標記狀態,某件事做了與否,達成目標與否
等級:表示占比劃分
04.色階色劑可以設置雙色色階或者三色色階。
05.半自定義規則如果還不過癮可以通過自定義格式來設置,整體設置也不難,所有的框和圖標均可以自定義設置。
06.公式自定義條件格式公式自定義條件格式,相對與上面的會難點,但通過簡單標志有更高的靈活度。
自定義格式百分比圖
2.動態考勤記錄表
3.項目計劃甘特圖
03.迷你圖迷你圖有三種形式,柱形、折線和盈虧圖,它的優點是能大概表示數據狀態,確定就是精準度低,圖形無法表示數據真實差距。
無排版可視化的表格
經過可視化后↓
點擊獲取Excel圖表視頻教程和源文件模板★★★★★04.三維地圖武廣之戀?
本題版本要求:2016及以上,2013版本可以安裝power map插件還能拯救。
點擊獲取Excel圖表視頻教程和源文件模板★★★★★本道題可以簡單拆分為:心形圖形表達式+三維地圖
01.第一步構建數據源
我們在百度或者一些論壇上找到心形的函數Excel表達式,然后在Excel上列出具體的數據源,這是最關鍵的又是最麻煩的一部分工作。就能直接下載該我精心為大家準備源文件啦!
02.打開三維地圖
1.我們把標準的心形函數表達式放到三維地圖上,其表達效果這樣紫滴,地理曾經滿分的我一下子恍然大悟,這不就是本初子午線(經度=0)與赤道(緯度=0)交界的地方嘛。
2.當我們把坐標的中心定位到廣州,不就是將原來的表達式加上廣州的經緯度,我馬上百度了一下廣州的經緯度。廣州(東經113.23,北緯23.16)大小老可愛們直接在我的城市填上經緯度就OK啦↓
以廣州為例↓
延伸:西經與南緯,需要把坐標寫成負數。如西經113.23,南緯23.16(-113.23,-23.16)這樣表達。
于是我們在茫茫的太平洋找到這個東西↓
03.添加異地坐標
在對應我的城市,和你的城市填上對應的坐標軸,可得到:
廣州與武漢?
廣州與珠海?
05.特別提醒
更改過數據源后一定要刷新數據啊!
E03.了解Excel圖表的規范與應用E03-1.參考優秀的圖表借鑒樣式、布局、配色等
a.echart網站
b.設計網站
c.可視化平臺等:如網易數讀
d.商業雜志
E03-2.一份專業商務圖表具備哪些特圖表原有元素:2.主標題;5.圖例;6繪圖區(1.縱坐標、2.網格線、3.橫坐標、4.圖形)
添加元素:1.logo;3.副標題,4.單位,7.備注
E03-3.快速了解圖表基礎設置E03-4.配置表格主題顏色
E03-5.系統設置整個表格主題
了解整個表格和圖表的基礎和規范設置后,我們馬上去了解各種基礎圖表。
E04.玩王者榮耀,學習基礎圖表學習基礎圖表,大家只需要吧這個《王者榮耀看板》做一遍,基本就你能掌握90%日常工作的應用,更重要你做完后會有一股成就感。
王者榮耀數據看板
王者榮耀動態看板
那我們分解一下,都是由哪些圖表構成的,從這個圖表就能從主標題看出是哪些圖表,我們還可以通過點擊圖表左上方藍色■形狀,進行跳轉到對應的圖表聯系區域。
教學部分主要采用了《經濟學人》的配色風格演示,大家可以通過設置頁面布局的主題,變換主題顏色。
E04-1.柱形圖01.表格開始頁引導:
02.圖表練習區域展示:
02.圖表小結區域:
每個圖表做了實踐之后,我們會給大家總結主要的知識點,方便大家快速上手圖表。
E04-2.條形圖條形圖在王者榮耀中很常見,例如對戰戰績圖,血量、藍量還有回城圖都是由條形圖來展示的。
03.知識點小結:
接下來的圖表,就簡單跟介紹一下需要注意的事項,或者一些與其他圖表的不同點或共同點:
E04-3.折線圖E04-4.環形/餅狀圖:占比分析E04-5.面積圖:占比趨勢分析這個在王者中的經濟占比運用的就是面積圖。
03.知識點小結:
E04-6.散點圖:雙變量分析03.知識點小結:
E04-7.氣泡圖:三變量分析03.知識點小結:
E04-8.雷達圖:多維度分析最常見在我們的綜合戰力分析上,幾乎每個游戲都會常常用到這種的對比。
03.知識點小結:
以前的案例示范:
E04-9.樹狀圖:分級占比分析E04-10.旭日圖:分級占比分析E04-10.直方圖:區間分布分析直方圖更像簡化版的正態分布圖,它經常用于統計數值區間的分布,例如年齡段的人數、收入水平、工資收入分布等。
E04-12.瀑布圖E04-13.組合圖E04.最后一招,數字放大法!
最后,我們把上面的所有圖表拼合在一起,可得:
把我們所學的圖表,一一放進去,可得到:
暫時補充到這里,如果想看動態圖表的,請留言,我抽空補充一下這方面的知識。
私信回復:基礎圖表,即可獲得一份基礎圖表的源文件?