序言
如果你對(duì)工作不滿意或?qū)ι畈粷M意,請(qǐng)不用抱怨,因?yàn)楹翢o(wú)用處,你只有努力提升技能,努力的完善自己,不斷地向前奔跑,才會(huì)越來(lái)越好的!
編碼問(wèn)題
網(wǎng)站目前最多的兩種編碼:utf-8,或者gbk,當(dāng)我們采集回來(lái)源網(wǎng)站編碼和我們數(shù)據(jù)庫(kù)存儲(chǔ)的編碼不一致時(shí),比如http://163.com的編碼使用的是gbk,而我們需要存儲(chǔ)的是utf-8編碼的數(shù)據(jù),那么我們可以使用Python中提供的encode()和decode()方法進(jìn)行轉(zhuǎn)換;
比如:
content = content.decode('gbk', 'ignore') # 將gbk編碼轉(zhuǎn)為unicode編碼。
content = content.encode('utf-8', 'ignore') # 將unicode編碼轉(zhuǎn)為utf-8編碼
如果中間出現(xiàn)了unicode編碼,我們需要轉(zhuǎn)為中間編碼unicode,才能向gbk或者utf-8轉(zhuǎn)換。
增量爬取
增量爬行是爬蟲(chóng)不重復(fù)下載下載的內(nèi)容。為了實(shí)現(xiàn)增量爬行,我們需要使用一個(gè)新的概念——網(wǎng)址池。網(wǎng)址池用于統(tǒng)一管理所有網(wǎng)址。我們通過(guò)網(wǎng)址池記錄我們的python爬蟲(chóng)訪問(wèn)過(guò)哪些內(nèi)容,以避免重復(fù)。網(wǎng)址池的用途也可以實(shí)現(xiàn)斷點(diǎn)續(xù)爬等。斷點(diǎn)續(xù)爬是讓之前沒(méi)有爬過(guò)的網(wǎng)址繼續(xù)爬蟲(chóng)。
爬蟲(chóng)被禁止
爬蟲(chóng)會(huì)給服務(wù)器帶來(lái)很大的負(fù)載,所以很多服務(wù)器會(huì)限制爬蟲(chóng),甚至禁用爬蟲(chóng)。眾所周知,要構(gòu)建合理的http訪問(wèn)頭,比如user-agent域的值。但是,還有很多其他避免被禁止的問(wèn)題,比如放慢爬蟲(chóng)的訪問(wèn)速度,讓爬蟲(chóng)的訪問(wèn)路徑與用戶的訪問(wèn)路徑一致,采用動(dòng)態(tài)ip地址等等。