最近很多朋友問我欺旧,我在自學(xué)爬蟲,學(xué)到什么程度可以去找工作呢蛤签?
這篇文章會(huì)說說我自己的心得體驗(yàn)辞友,關(guān)于爬蟲、關(guān)于工作震肮,僅供參考称龙。
學(xué)到哪種程度
暫且把目標(biāo)定位初級(jí)爬蟲工程師,簡單列一下吧:
(必要部分)
語言選擇:一般是了解Python戳晌、Java鲫尊、Golang之一
熟悉多線程編程、網(wǎng)絡(luò)編程躬厌、HTTP協(xié)議相關(guān)
開發(fā)過完整爬蟲項(xiàng)目(最好有全站爬蟲經(jīng)驗(yàn)马昨,這個(gè)下面會(huì)說到)
反爬相關(guān),cookie扛施、ip池鸿捧、驗(yàn)證碼等等
熟練使用分布式
(非必要,建議)
了解消息隊(duì)列疙渣,如RabbitMQ匙奴、Kafka、Redis等
具有數(shù)據(jù)挖掘妄荔、自然語言處理泼菌、信息檢索谍肤、機(jī)器學(xué)習(xí)經(jīng)驗(yàn)
熟悉APP數(shù)據(jù)采集、中間人代理
大數(shù)據(jù)處理(Hive/MR/Spark/Storm)
數(shù)據(jù)庫Mysql哗伯,redis荒揣,mongdb
熟悉Git操作、linux環(huán)境開發(fā)
讀懂js代碼焊刹,這個(gè)真的很重要
如何提升
隨便看看知乎上的教程就可以入門了系任,就Python而言,會(huì)requests當(dāng)然是不夠的虐块,還需要了解scrapy和pyspider這兩個(gè)框架俩滥,scrapy_redis也是需要理解原理的。
分布式如何搭建贺奠、如何解決其中遇到內(nèi)存霜旧、速度問題。
參考 scrapy-redis 和 scrapy 有什么區(qū)別儡率?
什么叫全站爬取
最簡單的拿拉鉤來舉例挂据,搜索關(guān)鍵詞,有30頁儿普,不要以為把這30頁爬完就是全站爬取了棱貌,你應(yīng)該想方法把所有數(shù)據(jù)全部爬下來。
什么辦法箕肃,通過篩選縮小范圍婚脱,慢慢來就OK了。
同時(shí)勺像,每個(gè)職位還會(huì)有推薦職位障贸,再寫一個(gè)采集推薦的爬蟲。
這個(gè)過程需要注意的是如何去重吟宦,Mongo可以篮洁、redis也可以。
參考 Scrapy中如何提高數(shù)據(jù)的插入速度
實(shí)際項(xiàng)目經(jīng)驗(yàn)
這個(gè)面試中肯定會(huì)被人問道殃姓,如:
你爬過哪些網(wǎng)站
日均最大采集量是多少
你遇到哪些棘手問題袁波,如何解決
等等
那么怎么找項(xiàng)目呢?比如我要爬微博數(shù)據(jù)蜗侈,去Github中搜索下篷牌,項(xiàng)目還算少嗎?
語言選擇
我自己建議是Python踏幻、Java枷颊、Golang最好都了解,Java爬蟲的也很多,但是網(wǎng)上教程幾乎都是Python的夭苗,悲哀信卡。
最后說下Golang,Golang真的很牛逼题造,說個(gè)數(shù)字傍菇,Golang可以每分鐘下載網(wǎng)頁數(shù)量 2W ,Python可以嗎~~?小編推薦一個(gè)學(xué)Python的學(xué)習(xí)裙【 二二七界赔,四三五桥嗤,四五零 】,無論你是大牛還是小白仔蝌,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具荒吏,很多干貨和技術(shù)資料分享敛惊!希望新手少走彎路
關(guān)于反爬
常見的 UA、Refer等需要了解是什么東西绰更,有些驗(yàn)證的ID如何產(chǎn)生的瞧挤,是否必要;關(guān)于IP池這塊我不了解儡湾,不多說特恬,需要注意的是如何設(shè)計(jì)拉黑機(jī)制;模擬登陸也是必要的徐钠,fuck-login 可以研究下代碼癌刽,或者提PR。
模擬登陸其實(shí)就是一步步的請(qǐng)求尝丐,保存cookie會(huì)話
如何判斷能力足夠
很簡單显拜,給個(gè)任務(wù),爬取知乎上所有問題爹袁。
你會(huì)如何思考并設(shè)計(jì)這個(gè)項(xiàng)目远荠?
歡迎留言指出
以上僅為個(gè)人看法,若有不足之處請(qǐng)指出失息。希望可以幫助你
文末知識(shí)點(diǎn)摘要:Python 中譬淳,字符串"連接"效率最高的方式是?一定出乎你的意料
網(wǎng)上很多文章人云亦云盹兢,字符串連接應(yīng)該使用「join」方法而不要用「+」操作邻梆。說前者效率更高,它以更少的代價(jià)創(chuàng)建新字符串绎秒,如果用「+」連接多個(gè)字符串确虱,每連接一次,就要為字符串分配一次內(nèi)存,效率顯得有點(diǎn)低校辩,這樣的解釋聽起來很有道理窘问,但 Cpython 解釋器是不是真的按照我們說的這樣呢?
今天做了一個(gè)試驗(yàn)宜咒,結(jié)果可能會(huì)出乎你的意料惠赫。
上面 3 個(gè)函數(shù)分別表示用「join」和「format」還有「+」操作來連接字符串,從 0 到 n故黑,總共 n 個(gè)數(shù)字連接起來構(gòu)成一個(gè)新的字符串儿咱,形如:1234567891011……n。
下面是測試腳本:
每組取了15個(gè)樣本數(shù)據(jù)场晶,分別用 1混埠,2,4诗轻,8钳宪,… 8192 個(gè)數(shù)字相連接,得到的統(tǒng)計(jì)數(shù)據(jù)可以看出扳炬,在數(shù)據(jù)量非常少的時(shí)候吏颖,三者效率幾乎沒什么差異,當(dāng)少于20個(gè)字符串連接時(shí)恨樟,用「+」效率甚至更高半醉,不過,隨著字符串的個(gè)數(shù)增多劝术,「join」方法發(fā)揮出來效果了缩多,而用「+」越來越慢。這點(diǎn)無論是 python2 還是 python3 基本上是一樣的养晋。
所以結(jié)論是:如果連接的字符串很少瞧壮,只有幾個(gè)或者十幾個(gè),完全可以通過「+」來連接匙握,畢竟這種方式更直白咆槽,而超過一定個(gè)數(shù)之后,則應(yīng)該采用「join」方法圈纺,只有在操作大數(shù)據(jù)的時(shí)候秦忿,兩者的對(duì)比才明顯。