簡(jiǎn)介 長(zhǎng)期枯燥的生活,敲代碼的時(shí)間三天兩頭往吸煙室跑,被項(xiàng)目經(jīng)理抓去訓(xùn)話(huà)。 “入門(mén)”是學(xué)習(xí)Python最重要的階段,雖然這個(gè)過(guò)程也許會(huì)非常緩慢。當(dāng)你心里有一個(gè)目標(biāo)時(shí),那么你學(xué)習(xí)起來(lái)就不會(huì)像別人學(xué)習(xí)的學(xué)習(xí)進(jìn)度一樣慢慢學(xué)習(xí),你會(huì)為了這個(gè)目標(biāo)而奮斗。其實(shí)有人說(shuō)這樣的學(xué)習(xí)方式會(huì)導(dǎo)致我們的基礎(chǔ)不夠扎實(shí),但是說(shuō)心里話(huà),我特別推崇這樣的學(xué)習(xí)方式。 在整個(gè)Python學(xué)習(xí)的體系里,朝目標(biāo)學(xué)習(xí)累積的經(jīng)驗(yàn)可以幫助你學(xué)習(xí)基礎(chǔ)知識(shí)。所以,你不需要花費(fèi)更多的時(shí)間學(xué)習(xí)怎樣“入門(mén)”,“入門(mén)”點(diǎn)根本不存在!當(dāng)你學(xué)習(xí)直接做一個(gè)整體項(xiàng)目的過(guò)程中,你學(xué)習(xí)它所需要的基礎(chǔ)知識(shí)將變得非???。當(dāng)然,很多人就要爭(zhēng)論說(shuō)學(xué)習(xí)Python爬蟲(chóng)之前必須要先懂python,然而事實(shí)是,你完全能夠在學(xué)習(xí)Python爬蟲(chóng)的時(shí)候弄懂python。 網(wǎng)絡(luò)爬蟲(chóng)怎么工作、如何用python實(shí)現(xiàn)? 你需要學(xué)習(xí) 一丶首先你要明白爬蟲(chóng)怎樣工作 好的,理論上如果所有的頁(yè)面可以從initial page達(dá)到的話(huà),那么可以證明你一定可以爬完所有的網(wǎng)頁(yè)。 那么在python里怎么實(shí)現(xiàn)呢? 寫(xiě)得已經(jīng)很通俗了。 所有的爬蟲(chóng)的back bone都在這里,下面分析一下為什么爬蟲(chóng)事實(shí)上是個(gè)非常復(fù)雜的東西——搜索引擎公司通常有一整個(gè)團(tuán)隊(duì)來(lái)維護(hù)和開(kāi)發(fā)。 二丶效率 如果你直接加工一下上面的代碼直接運(yùn)行的話(huà),你需要一整年才能爬下整個(gè)豆瓣的內(nèi)容。更別說(shuō)Google這樣的搜索引擎需要爬下全網(wǎng)的內(nèi)容了。 問(wèn)題出在哪呢? 查重處理最快的方法。不管你的帶寬有多大,你的機(jī)器下載網(wǎng)頁(yè)的速度都有個(gè)限制,那么你可以用多臺(tái)機(jī)器加快這個(gè)速度。當(dāng)然,我們使用Python多進(jìn)程,假設(shè)每臺(tái)機(jī)子都已經(jīng)進(jìn)了最大的效率。 三丶集群化抓取 我爬取豆瓣,總共用了80多臺(tái)機(jī)器晝夜不停地運(yùn)行了一個(gè)月。那么可以知道只用一臺(tái)電腦我們要等80個(gè)月都算少的。 那么,假設(shè)你現(xiàn)在有80臺(tái)機(jī)器可以用,怎么用python實(shí)現(xiàn)一個(gè)分布式的爬取算法呢? 考慮如何用python實(shí)現(xiàn): 每個(gè)slave上安裝scrapy,那么所有的電腦就變成了一臺(tái)有抓取能力的slave,在master上裝好Redis和rq用作分布式隊(duì)列。 python代碼: 好的,其實(shí)你能想到,有人已經(jīng)給你寫(xiě)好了你需要的:darkrho/scrapy-redis · GitHub 四丶展望及后處理 雖然上面用很多東西看似簡(jiǎn)單,但是真正要實(shí)現(xiàn)一個(gè)商業(yè)規(guī)??捎玫膒ython爬蟲(chóng)還是有挑戰(zhàn)的。上面的所陳述的python代碼,用來(lái)爬取一個(gè)整體的網(wǎng)站是沒(méi)有太大的問(wèn)題的。 你想象不到,這里每一個(gè)點(diǎn)都可以供無(wú)數(shù)程序員數(shù)十年的研究。 然而不要怕,路就在腳下,直接上手即可。 |
|
來(lái)自: 江南荷葉 > 《電腦技術(shù)》