Python多線程如何抓取網(wǎng)站內(nèi)容
Python多線程在不斷的使用中需要我們更多的學(xué)習(xí)相關(guān)的技術(shù)知識(shí)。單線程太慢的話,就需要Python多線程了,這里給個(gè)簡單的線程池模板。這個(gè)程序只是簡單地打印了110,但是可以看出是并發(fā)地。
- from threading import Thread
- from Queue import Queue
- from time import sleep
- #q是任務(wù)隊(duì)列
- #NUM是并發(fā)線程總數(shù)
- #JOBS是有多少任務(wù)
- q = Queue()
- NUM = 2
- JOBS = 10
- #具體的處理函數(shù),負(fù)責(zé)處理單個(gè)任務(wù)
- def do_somthing_using(arguments):
- print arguments
- #這個(gè)是工作進(jìn)程,負(fù)責(zé)不斷從隊(duì)列取數(shù)據(jù)并處理
- def working():
- while True:
- arguments = q.get()
- do_somthing_using(arguments)
- sleep(1)
- q.task_done()
- #fork NUM個(gè)線程等待隊(duì)列
- for i in range(NUM):
- t = Thread(target=working)
- t.setDaemon(True)
- t.start()
- #把JOBS排入隊(duì)列
- for i in range(JOBS):
- q.put(i)
- #等待所有JOBS完成
q.join()5.驗(yàn)證碼的處理碰到驗(yàn)證碼咋辦?這里分兩種情況處理:
google那種驗(yàn)證碼,涼拌
簡單的驗(yàn)證碼:字符個(gè)數(shù)有限,只使用了簡單的平移或旋轉(zhuǎn)加噪音而沒有扭曲的,這種還是有可能可以處理的,一般思路是旋轉(zhuǎn)的轉(zhuǎn)回來,噪音去掉,然后劃分 單個(gè)字符,劃分好了以后再通過特征提取的方法(例如PCA) 降維并生成特征庫,然后把驗(yàn)證碼和特征庫進(jìn)行比較。這個(gè)比較復(fù)雜,一篇博文是說不完的,這里就不展開了,具體做法請(qǐng)弄本相關(guān)教科書好好研究一下。
事實(shí)上有些驗(yàn)證碼還是很弱的,這里就不點(diǎn)名了,反正我通過2的方法提取過準(zhǔn)確度非常高的驗(yàn)證碼,所以2事實(shí)上是可行的。
基本上我遇到過的所有情況,用以上方法都順利解決了,不太清楚還有沒有其他漏掉的情況,所以本文到這里就完成了,以后要是碰上其他情況,再補(bǔ)充相關(guān)方法好 了:)
【編輯推薦】


















