Python多线程如何抓取网站内容


Python多线程在不断的使用中需要我们更多的学习相关的技术知识。单线程太慢的话,就需要Python多线程了,这里给个简单的线程池模板。这个程序只是简单地打印了110,但是可以看出是并发地。

  1. from threading import Thread  
  2. from Queue import Queue  
  3. from time import sleep  
  4. #q是任务队列  
  5. #NUM是并发线程总数  
  6. #JOBS是有多少任务  
  7. q = Queue()  
  8. NUM = 2 
  9. JOBS = 10 
  10. #具体的处理函数,负责处理单个任务  
  11. def do_somthing_using(arguments):  
  12. print arguments  
  13. #这个是工作进程,负责不断从队列取数据并处理  
  14. def working():  
  15. while True:  
  16. arguments = q.get()  
  17. do_somthing_using(arguments)  
  18. sleep(1)  
  19. q.task_done()  
  20. #fork NUM个线程等待队列  
  21. for i in range(NUM):  
  22. t = Thread(target=working)  
  23. t.setDaemon(True)  
  24. t.start()  
  25. #把JOBS排入队列  
  26. for i in range(JOBS):  
  27. q.put(i)  
  28. #等待所有JOBS完成 

q.join()5.验证码的处理碰到验证码咋办?这里分两种情况处理:

google那种验证码,凉拌

简单的验证码:字符个数有限,只使用了简单的平移或旋转加噪音而没有扭曲的,这种还是有可能可以处理的,一般思路是旋转的转回来,噪音去掉,然后划分 单个字符,划分好了以后再通过特征提取的方法(例如PCA) 降维并生成特征库,然后把验证码和特征库进行比较。这个比较复杂,一篇博文是说不完的,这里就不展开了,具体做法请弄本相关教科书好好研究一下。

事实上有些验证码还是很弱的,这里就不点名了,反正我通过2的方法提取过准确度非常高的验证码,所以2事实上是可行的。

基本上我遇到过的所有情况,用以上方法都顺利解决了,不太清楚还有没有其他漏掉的情况,所以本文到这里就完成了,以后要是碰上其他情况,再补充相关方法好 了:)

评论关闭