從爬蟲(chóng)必要的幾個(gè)基本需求來(lái)講:
1.抓取
py的urllib不一定去用殷蛇,但是要學(xué)直砂,如果還沒(méi)用過(guò)的話史辙。
比較好的替代品有requests等第三方更人性化汹买、成熟的庫(kù),如果pyer不了解各種庫(kù)髓霞,那就白學(xué)了卦睹。
抓取最基本就是拉網(wǎng)頁(yè)回來(lái)畦戒。
如果深入做下去方库,會(huì)發(fā)現(xiàn)要面對(duì)不同的網(wǎng)頁(yè)要求,比如有認(rèn)證的障斋,不同文件格式、編碼處理伴挚,各種奇怪的url合規(guī)化處理失暴、重復(fù)抓取問(wèn)題、cookies跟隨問(wèn)題返敬、多線程多進(jìn)程抓取、多節(jié)點(diǎn)抓取寥院、抓取調(diào)度劲赠、資源壓縮等一系列問(wèn)題。
所以第一步就是拉網(wǎng)頁(yè)回來(lái)秸谢,慢慢會(huì)發(fā)現(xiàn)各種問(wèn)題待優(yōu)化凛澎。
2.存儲(chǔ)
抓回來(lái)一般會(huì)用一定策略存下來(lái),而不是直接分析估蹄,個(gè)人覺(jué)得更好的架構(gòu)應(yīng)該是把分析和抓取分離塑煎,更加松散,每個(gè)環(huán)節(jié)出了問(wèn)題能夠隔離另外一個(gè)環(huán)節(jié)可能出現(xiàn)的問(wèn)題臭蚁,好排查也好更新發(fā)布最铁。
那么存文件系統(tǒng)、SQLorNOSQL數(shù)據(jù)庫(kù)垮兑、內(nèi)存數(shù)據(jù)庫(kù)冷尉,如何去存就是這個(gè)環(huán)節(jié)的重點(diǎn)。
可以選擇存文件系統(tǒng)開(kāi)始甥角,然后以一定規(guī)則命名网严。
3.分析
對(duì)網(wǎng)頁(yè)進(jìn)行文本分析,提取鏈接也好嗤无,提取正文也好震束,總之看的需求,但是一定要做的就是分析鏈接了当犯。
可以用認(rèn)為最快最優(yōu)的辦法垢村,比如正則表達(dá)式。
然后將分析后的結(jié)果應(yīng)用與其他環(huán)節(jié):)
4.展示
要是做了一堆事情嚎卫,一點(diǎn)展示輸出都沒(méi)有嘉栓,如何展現(xiàn)價(jià)值。
所以找到好的展示組件拓诸,去show出肌肉也是關(guān)鍵侵佃。
如果為了做個(gè)站去寫(xiě)爬蟲(chóng),抑或要分析某個(gè)東西的數(shù)據(jù)奠支,都不要忘了這個(gè)環(huán)節(jié)馋辈,更好地把結(jié)果展示出來(lái)給別人感受。
“入門(mén)”是良好的動(dòng)機(jī)倍谜,但是可能作用緩慢迈螟。如果你手里或者腦子里有一個(gè)項(xiàng)目叉抡,那么實(shí)踐起來(lái)你會(huì)被目標(biāo)驅(qū)動(dòng),而不會(huì)像學(xué)習(xí)模塊一樣慢慢學(xué)習(xí)答毫。另外如果說(shuō)知識(shí)體系里的每一個(gè)知識(shí)點(diǎn)是圖里的點(diǎn)褥民,依賴關(guān)系是邊的話,那么這個(gè)圖一定不是一個(gè)有向無(wú)環(huán)圖洗搂。因?yàn)閷W(xué)習(xí)A的經(jīng)驗(yàn)可以幫助你學(xué)習(xí)B消返。因此,你不需要學(xué)習(xí)怎么樣“入門(mén)”耘拇,因?yàn)檫@樣的“入門(mén)”點(diǎn)根本不存在侦副!你需要學(xué)習(xí)的是怎么樣做一個(gè)比較大的東西,在這個(gè)過(guò)程中驼鞭,你會(huì)很快地學(xué)會(huì)需要學(xué)會(huì)的東西的秦驯。當(dāng)然,你可以爭(zhēng)論說(shuō)需要先懂python挣棕,不然怎么學(xué)會(huì)python做爬蟲(chóng)呢译隘?但是事實(shí)上,你完全可以在做這個(gè)爬蟲(chóng)的過(guò)程中學(xué)習(xí)python :D看到前面很多答案都講的“術(shù)”——用什么軟件怎么爬洛心,那我就講講“道”和“術(shù)”吧——爬蟲(chóng)怎么工作以及怎么在python實(shí)現(xiàn)固耘。先長(zhǎng)話短說(shuō)summarize一下:你需要學(xué)習(xí)基本的爬蟲(chóng)工作原理基本的http抓取工具,scrapyBloom Filter: Bloom Filters by Example如果需要大規(guī)模網(wǎng)頁(yè)抓取词身,你需要學(xué)習(xí)分布式爬蟲(chóng)的概念厅目。其實(shí)沒(méi)那么玄乎,你只要學(xué)會(huì)怎樣維護(hù)一個(gè)所有集群機(jī)器能夠有效分享的分布式隊(duì)列就好法严。最簡(jiǎn)單的實(shí)現(xiàn)是python-rq: https://github.com/nvie/rqrq和Scrapy的結(jié)合:darkrho/scrapy-redis · GitHub后續(xù)處理损敷,網(wǎng)頁(yè)析取(grangier/python-goose · GitHub),存儲(chǔ)(Mongodb)以下是短話長(zhǎng)說(shuō):說(shuō)說(shuō)當(dāng)初寫(xiě)的一個(gè)集群爬下整個(gè)豆瓣的經(jīng)驗(yàn)吧深啤。1)首先你要明白爬蟲(chóng)怎樣工作拗馒。想象你是一只蜘蛛,現(xiàn)在你被放到了互聯(lián)“網(wǎng)”上溯街。那么诱桂,你需要把所有的網(wǎng)頁(yè)都看一遍。怎么辦呢呈昔?沒(méi)問(wèn)題呀挥等,你就隨便從某個(gè)地方開(kāi)始,比如說(shuō)人民日?qǐng)?bào)的首頁(yè)堤尾,這個(gè)叫initial pages肝劲,用$表示吧。在人民日?qǐng)?bào)的首頁(yè)哀峻,你看到那個(gè)頁(yè)面引向的各種鏈接涡相。于是你很開(kāi)心地從爬到了“國(guó)內(nèi)新聞”那個(gè)頁(yè)面。太好了剩蟀,這樣你就已經(jīng)爬完了倆頁(yè)面(首頁(yè)和國(guó)內(nèi)新聞)催蝗!暫且不用管爬下來(lái)的頁(yè)面怎么處理的,你就想象你把這個(gè)頁(yè)面完完整整抄成了個(gè)html放到了你身上育特。突然你發(fā)現(xiàn)丙号, 在國(guó)內(nèi)新聞這個(gè)頁(yè)面上,有一個(gè)鏈接鏈回“首頁(yè)”缰冤。作為一只聰明的蜘蛛犬缨,你肯定知道你不用爬回去的吧,因?yàn)槟阋呀?jīng)看過(guò)了啊棉浸。所以怀薛,你需要用你的腦子,存下你已經(jīng)看過(guò)的頁(yè)面地址迷郑。這樣枝恋,每次看到一個(gè)可能需要爬的新鏈接,你就先查查你腦子里是不是已經(jīng)去過(guò)這個(gè)頁(yè)面地址嗡害。如果去過(guò)焚碌,那就別去了。好的霸妹,理論上如果所有的頁(yè)面可以從initial page達(dá)到的話十电,那么可以證明你一定可以爬完所有的網(wǎng)頁(yè)。那么在python里怎么實(shí)現(xiàn)呢叹螟?很簡(jiǎn)單import Queue
initial_page = "http://www.renminribao.com"
url_queue = Queue.Queue()
seen = set()
seen.insert(initial_page)
url_queue.put(initial_page)
while(True): #一直進(jìn)行直到壕槁睿枯石爛
if url_queue.size()>0:
current_url = url_queue.get()? ? #拿出隊(duì)例中第一個(gè)的url
store(current_url)? ? ? ? ? ? ? #把這個(gè)url代表的網(wǎng)頁(yè)存儲(chǔ)好
for next_url in extract_urls(current_url): #提取把這個(gè)url里鏈向的url
if next_url not in seen:
seen.put(next_url)
url_queue.put(next_url)
else:
break
寫(xiě)得已經(jīng)很偽代碼了。所有的爬蟲(chóng)的backbone都在這里罢绽,下面分析一下為什么爬蟲(chóng)事實(shí)上是個(gè)非常復(fù)雜的東西——搜索引擎公司通常有一整個(gè)團(tuán)隊(duì)來(lái)維護(hù)和開(kāi)發(fā)偎漫。2)效率如果你直接加工一下上面的代碼直接運(yùn)行的話,你需要一整年才能爬下整個(gè)豆瓣的內(nèi)容有缆。更別說(shuō)Google這樣的搜索引擎需要爬下全網(wǎng)的內(nèi)容了象踊。問(wèn)題出在哪呢?需要爬的網(wǎng)頁(yè)實(shí)在太多太多了棚壁,而上面的代碼太慢太慢了杯矩。設(shè)想全網(wǎng)有N個(gè)網(wǎng)站,那么分析一下判重的復(fù)雜度就是N*log(N)袖外,因?yàn)樗芯W(wǎng)頁(yè)要遍歷一次史隆,而每次判重用set的話需要log(N)的復(fù)雜度。OK曼验,OK泌射,我知道python的set實(shí)現(xiàn)是hash——不過(guò)這樣還是太慢了粘姜,至少內(nèi)存使用效率不高。通常的判重做法是怎樣呢熔酷?Bloom Filter. 簡(jiǎn)單講它仍然是一種hash的方法孤紧,但是它的特點(diǎn)是,它可以使用固定的內(nèi)存(不隨url的數(shù)量而增長(zhǎng))以O(shè)(1)的效率判定url是否已經(jīng)在set中拒秘『畔裕可惜天下沒(méi)有白吃的午餐,它的唯一問(wèn)題在于躺酒,如果這個(gè)url不在set中押蚤,BF可以100%確定這個(gè)url沒(méi)有看過(guò)。但是如果這個(gè)url在set中羹应,它會(huì)告訴你:這個(gè)url應(yīng)該已經(jīng)出現(xiàn)過(guò)揽碘,不過(guò)我有2%的不確定性。注意這里的不確定性在你分配的內(nèi)存足夠大的時(shí)候园匹,可以變得很小很少钾菊。一個(gè)簡(jiǎn)單的教程:Bloom Filters by Example注意到這個(gè)特點(diǎn),url如果被看過(guò)偎肃,那么可能以小概率重復(fù)看一看(沒(méi)關(guān)系煞烫,多看看不會(huì)累死)。但是如果沒(méi)被看過(guò)累颂,一定會(huì)被看一下(這個(gè)很重要滞详,不然我們就要漏掉一些網(wǎng)頁(yè)了!)紊馏。 [IMPORTANT: 此段有問(wèn)題料饥,請(qǐng)暫時(shí)略過(guò)]好,現(xiàn)在已經(jīng)接近處理判重最快的方法了朱监。另外一個(gè)瓶頸——你只有一臺(tái)機(jī)器岸啡。不管你的帶寬有多大,只要你的機(jī)器下載網(wǎng)頁(yè)的速度是瓶頸的話赫编,那么你只有加快這個(gè)速度巡蘸。用一臺(tái)機(jī)子不夠的話——用很多臺(tái)吧!當(dāng)然擂送,我們假設(shè)每臺(tái)機(jī)子都已經(jīng)進(jìn)了最大的效率——使用多線程(python的話悦荒,多進(jìn)程吧)。3)集群化抓取爬取豆瓣的時(shí)候嘹吨,我總共用了100多臺(tái)機(jī)器晝夜不停地運(yùn)行了一個(gè)月搬味。想象如果只用一臺(tái)機(jī)子你就得運(yùn)行100個(gè)月了...那么,假設(shè)你現(xiàn)在有100臺(tái)機(jī)器可以用,怎么用python實(shí)現(xiàn)一個(gè)分布式的爬取算法呢碰纬?我們把這100臺(tái)中的99臺(tái)運(yùn)算能力較小的機(jī)器叫作slave萍聊,另外一臺(tái)較大的機(jī)器叫作master,那么回顧上面代碼中的url_queue悦析,如果我們能把這個(gè)queue放到這臺(tái)master機(jī)器上寿桨,所有的slave都可以通過(guò)網(wǎng)絡(luò)跟master聯(lián)通,每當(dāng)一個(gè)slave完成下載一個(gè)網(wǎng)頁(yè)她按,就向master請(qǐng)求一個(gè)新的網(wǎng)頁(yè)來(lái)抓取。而每次slave新抓到一個(gè)網(wǎng)頁(yè)炕柔,就把這個(gè)網(wǎng)頁(yè)上所有的鏈接送到master的queue里去酌泰。同樣,bloom filter也放到master上匕累,但是現(xiàn)在master只發(fā)送確定沒(méi)有被訪問(wèn)過(guò)的url給slave陵刹。Bloom Filter放到master的內(nèi)存里,而被訪問(wèn)過(guò)的url放到運(yùn)行在master上的Redis里欢嘿,這樣保證所有操作都是O(1)衰琐。(至少平攤是O(1),Redis的訪問(wèn)效率見(jiàn):LINSERT – Redis)考慮如何用python實(shí)現(xiàn):在各臺(tái)slave上裝好scrapy炼蹦,那么各臺(tái)機(jī)子就變成了一臺(tái)有抓取能力的slave羡宙,在master上裝好Redis和rq用作分布式隊(duì)列。代碼于是寫(xiě)成#slave.py
current_url = request_from_master()
to_send = []
for next_url in extract_urls(current_url):
to_send.append(next_url)
store(current_url);
send_to_master(to_send)
#master.py
distributed_queue = DistributedQueue()
bf = BloomFilter()
initial_pages = "www.renmingribao.com"
while(True):
if request == 'GET':
if distributed_queue.size()>0:
send(distributed_queue.get())
else:
break
elif request == 'POST':
bf.put(request.url)
好的掐隐,其實(shí)你能想到狗热,有人已經(jīng)給你寫(xiě)好了你需要的:darkrho/scrapy-redis · GitHub4)展望及后處理雖然上面用很多“簡(jiǎn)單”,但是真正要實(shí)現(xiàn)一個(gè)商業(yè)規(guī)穆鞘。可用的爬蟲(chóng)并不是一件容易的事匿刮。上面的代碼用來(lái)爬一個(gè)整體的網(wǎng)站幾乎沒(méi)有太大的問(wèn)題。但是如果附加上你需要這些后續(xù)處理探颈,比如有效地存儲(chǔ)(數(shù)據(jù)庫(kù)應(yīng)該怎樣安排)有效地判重(這里指網(wǎng)頁(yè)判重熟丸,咱可不想把人民日?qǐng)?bào)和抄襲它的大民日?qǐng)?bào)都爬一遍)有效地信息抽取(比如怎么樣抽取出網(wǎng)頁(yè)上所有的地址抽取出來(lái)伪节,“朝陽(yáng)區(qū)奮進(jìn)路中華道”)光羞,搜索引擎通常不需要存儲(chǔ)所有的信息,比如圖片我存來(lái)干嘛...及時(shí)更新(預(yù)測(cè)這個(gè)網(wǎng)頁(yè)多久會(huì)更新一次)如你所想怀大,這里每一個(gè)點(diǎn)都可以供很多研究者十?dāng)?shù)年的研究狞山。雖然如此,“路漫漫其修遠(yuǎn)兮,吾將上下而求索”叉寂。所以萍启,不要問(wèn)怎么入門(mén),直接上路就好了:)
最后“
自己多問(wèn)下為什么學(xué)python”
如果一門(mén)語(yǔ)言沒(méi)有改變你的編程思維,那么它不值得你去學(xué)習(xí)”勘纯。如果這么說(shuō)局服,我們大學(xué)的時(shí)候,學(xué)習(xí)了c驳遵,c++淫奔,java,C#堤结,算是值得學(xué)習(xí)么唆迁?很多時(shí)候是不值得,我覺(jué)得我們大學(xué)的課程就是用java竞穷,c#唐责,c++把"C程序設(shè)計(jì)"又上了一遍.
這是因?yàn)椋瑢W(xué)校的老師會(huì)C和java之類的瘾带,所以要跟著規(guī)矩開(kāi)這門(mén)課鼠哥,(這也就是為什么,許多學(xué)校還在教vb看政,),這也就是為什么朴恳,你所以為的一樣就是大家都有For都有while,都有switch..都有Class...都有int 都有float,所謂的不一樣就是用C有指針允蚣,java沒(méi)有于颖,這就是為什么教育是失敗的,這也就是為什么嚷兔,我目前認(rèn)識(shí)的幾個(gè)編程大牛
python的優(yōu)點(diǎn):簡(jiǎn)單 我所說(shuō)的簡(jiǎn)單恍飘,是相比于象C和C++這樣的語(yǔ)言,你為了編程,要學(xué)習(xí)許多偏底層的東西.在比如谴垫,你在學(xué)習(xí)一個(gè)新的編程范式章母,或者想要馬上做個(gè)例子看看,試驗(yàn)?zāi)硞€(gè)API,如果你是寫(xiě)java的翩剪,你不得不去寫(xiě)一個(gè)main乳怎,寫(xiě)一些構(gòu)造,即使有IDE這樣的東西前弯,能夠?yàn)槟銕?lái)代碼生成器,而我做得就是寫(xiě)一段“腳本”询枚,或者打開(kāi)python交互式解釋器就行了浙巫。
自己認(rèn)識(shí)的python朋友出去工作金蜀,工資比較高刷后,然后自己又剛剛好是會(huì)python所以選擇學(xué)習(xí)python,這樣的人比較危險(xiǎn)但是也比較有激勵(lì)尝胆,還有就是覺(jué)得python比其他開(kāi)發(fā)語(yǔ)言好用护桦。
學(xué)完python前景會(huì)咋樣
其實(shí)我個(gè)人是很看好python未來(lái)的就業(yè)前景的含衔,因?yàn)槲艺J(rèn)識(shí)太多的工程師都已經(jīng)在學(xué)python,很多都是月收入大幾萬(wàn)的
我個(gè)人也并非一直用python二庵。前些年主要用c/c++以及java開(kāi)發(fā)一些通信贪染,移動(dòng)系統(tǒng)催享,互聯(lián)網(wǎng)通信睡陪。近3年開(kāi)始才轉(zhuǎn)向python匿情。坦白的說(shuō),這可能與你相處的公司以及環(huán)境不大一樣炬称。隨便舉個(gè)例子,google的protocol buffer協(xié)議一出來(lái)就具有c++/python/java三種語(yǔ)言支持据德。google的廣告系統(tǒng)早在03,04年左右就一并對(duì)python進(jìn)行了webservice支持跷车,大部分涉及基礎(chǔ)核心系統(tǒng)的公司,都開(kāi)始對(duì)python進(jìn)行了擴(kuò)展支持善玫。甚至開(kāi)源社區(qū)的postgresql數(shù)據(jù)庫(kù)密强,除了自身的ansi SQL,pgsql,pg/TCL,PG/PERL之外對(duì)python進(jìn)行了內(nèi)嵌支持,唯獨(dú)卻沒(méi)有呼聲很高的java系冗。在FREEBSD(MIT)/LINUX(GPL)平臺(tái)上薪鹦,對(duì)java可能排斥性比較大惯豆,但綜合而言涝开,目前python發(fā)展還沒(méi)有java那種普及,主要是python大部分工作仍然是在較為深入地系統(tǒng)層和框架層做設(shè)計(jì)開(kāi)發(fā)舀武,例如django,SQLAlchemy,fail2ban,mail郵件系統(tǒng),twisted等等银舱。這部分對(duì)于那種習(xí)慣應(yīng)用前輩們框架的編碼人員而言,缺乏創(chuàng)造力的他們根本無(wú)法適用這種開(kāi)發(fā)棋弥。尤其在python涉及一些系統(tǒng)層面需要有較強(qiáng)的c/c++能力诚欠,這部分人在國(guó)內(nèi)要么就累得要死沒(méi)時(shí)間,要么就啥都不會(huì)就會(huì)拷貝代碼轰绵,而國(guó)內(nèi)公司也鮮有主動(dòng)去做這部分基礎(chǔ)勞動(dòng)的左腔,大多都是等別人做好了在直接拿來(lái)用,所以造就了任何技術(shù)性的東西出來(lái)振亮,國(guó)內(nèi)都是先等等看鞭莽,然后抄襲應(yīng)用。
大環(huán)境如此褒搔,但千萬(wàn)誤認(rèn)為先等等看吧丹拯。對(duì)于一個(gè)技術(shù)人員而言,缺乏對(duì)新技術(shù)的渴望與熱情死相,這是一種非常危險(xiǎn)的事情咬像。我工作8年了生宛,按照國(guó)內(nèi)很多的人的說(shuō)法早已不做代碼了肮柜,但又一次在聽(tīng)一個(gè)老外的演講审洞,他說(shuō)他50多歲仍然每天堅(jiān)持寫(xiě)代碼,了解最新的動(dòng)態(tài)芒澜,所以他才能做到他們公司的首席科學(xué)家痴晦,因此它才能時(shí)刻指導(dǎo)項(xiàng)目團(tuán)隊(duì)前進(jìn)并保證項(xiàng)目的質(zhì)量。他坦言對(duì)于一個(gè)不寫(xiě)代碼并且不了解最新的技術(shù)動(dòng)態(tài)的技術(shù)人員或者技術(shù)團(tuán)隊(duì)的負(fù)責(zé)人而言部凑,這種團(tuán)隊(duì)也就足夠做作小項(xiàng)目碧浊,一旦壓力和項(xiàng)目過(guò)大,就會(huì)有很多問(wèn)題漏出來(lái)必孤。
對(duì)于新人而言瑞躺,無(wú)論學(xué)習(xí)什么技術(shù)兴想,都要以鼓勵(lì)的姿態(tài)出現(xiàn)。太多用薪水和你個(gè)人所看到的現(xiàn)狀去衡量一門(mén)技術(shù)捞镰,那絕對(duì)是欠缺眼光的毙替。任何一門(mén)技術(shù),一旦有人學(xué)習(xí)凸丸,他有可能逐漸成為這個(gè)領(lǐng)域的專家袱院,即便再濫再?zèng)]有人用的開(kāi)發(fā)語(yǔ)言技術(shù),他也有可能就是明日的奠基者或者大師腻惠。
自己如何確定目標(biāo)
在生活中學(xué)會(huì)不斷挖掘自己的潛力。我們都是一個(gè)普通人悔雹,可能并不清楚自己到底在哪方面占有優(yōu)勢(shì)欣喧。所以续誉,學(xué)著在生活中找到自己的優(yōu)勢(shì),并根據(jù)優(yōu)勢(shì)選擇一定的就業(yè)方向酷鸦。
不隨波逐流臼隔。不要看周圍的人做什么,自己就做什么寄狼,也許別人做的并不適合你氨淌。別人的優(yōu)勢(shì)很可能會(huì)成為你的劣勢(shì)。所以删咱,堅(jiān)定自己的想法豪筝,讓自己知道那些方面適合自己,自己可以勝任敲街。
不斷嘗試可能成為自己的優(yōu)勢(shì)严望。你不知道什么適合自己,所以才要大膽墩蔓、勇敢地嘗試。找到一種可以屬于你的獨(dú)特的優(yōu)勢(shì)昏名。
堅(jiān)定信念阵面。一旦你堅(jiān)定了自己的信念,就不要被別人的意見(jiàn)或是諷刺或是嘲笑所干擾仑扑。別人不是你置鼻,不懂的你在想什么箕母,不清楚你開(kāi)始這件事的源頭。你的事情嘶是,不了解你的人聂喇,沒(méi)有資格輕易評(píng)說(shuō)。
不茫然克饶,不多想跛十。別讓太多的事干擾到你奮斗下去的信念秕硝。夢(mèng)想不容許太多的雜念远豺。那些雜念只會(huì)讓你的心愈來(lái)愈脆弱,多為一個(gè)人考慮躯护,到頭來(lái)棺滞,傷害的還是自己矢渊。
選擇自己學(xué)習(xí)方法
每個(gè)人都有適合自己的方法枉证,有的人去選擇自學(xué)室谚,有的人選擇看視頻學(xué)習(xí),有的人選擇報(bào)名培訓(xùn)班猪瞬,那在這個(gè)時(shí)候入篮,你就要自己考慮清楚,到底那樣對(duì)的幫助是最大的甘晤,個(gè)人覺(jué)得是跟著培訓(xùn)班最好的饲做,畢竟人家的實(shí)戰(zhàn)項(xiàng)目多,我們學(xué)軟件開(kāi)發(fā)的都知道實(shí)戰(zhàn)項(xiàng)目對(duì)于學(xué)好一門(mén)語(yǔ)言是 很重要的塞弊。
學(xué)習(xí)python有那些誤區(qū)
具體里面的誤區(qū)非常的多泪姨,那些就不需要我去寫(xiě)出來(lái)肮砾,我給你說(shuō)的一般都是心態(tài)的問(wèn)題,首先一個(gè)覺(jué)得自己會(huì)java和c++眯勾,然后我學(xué)習(xí)python就很牛婆誓,但是你要知道語(yǔ)言是有很多相同的地方,但是不是通用郁轻,一定要自己學(xué)習(xí)的仔細(xì)。還有一種就是覺(jué)得我不會(huì)英語(yǔ)竭沫,我要先去把英語(yǔ)學(xué)習(xí)好在來(lái)學(xué)python骑篙。因?yàn)樽约合脒€壞主意然后學(xué)習(xí)替蛉,這樣的都是容易找進(jìn)誤區(qū)的。
怎么樣才能學(xué)好python
學(xué)好python你需要一個(gè)良好的環(huán)境它浅,一個(gè)優(yōu)質(zhì)的開(kāi)發(fā)交流群镣煮,群里都是那種相互幫助的人才是可以的,我有建立一個(gè)python學(xué)習(xí)交流群镊折,在群里我們相互幫助介衔,相互關(guān)心,相互分享內(nèi)容赃泡,這樣出問(wèn)題幫助你的人就比較多乘盼,群號(hào)是304加上050最後799,這樣就可以找到大神聚合的群级野,如果你只愿意別人幫助你粹胯,不愿意分享或者幫助別人,那就請(qǐng)不要加了渊抽,你把你會(huì)的告訴別人這是一種分享。
感覺(jué)寫(xiě)的好十减,對(duì)你有幫助,就點(diǎn)個(gè)贊唄速址,別光只收藏哈.~( ̄▽ ̄)~
?