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