# -*- coding: cp936 -*-
'''
author:郎芭
QQ:149737748
'''
import os,urllib2,time,sys,re
import thread
from bs4 import BeautifulSoup
start_time=time.clock()
za='<div.*</div>'
a=thread.allocate()#多线程用的锁
a.acquire()  #设置第二部份锁为阻塞
b=thread.allocate()
b.acquire()#第三部分
c=thread.allocate()
c.acquire()#第四部分
d=thread.allocate()
d.acquire()def runa(qi,zhi,wurl,x,y):result=''soup=bsp(wurl)lzname=soup.find('div',{'class':'atl-menu clearfix js-bbs-act'})['js_activityusername']for i in xrange(int(qi),int(zhi)+1):newurl='http://bbs.tianya.cn/post-%s-%s-%s.shtml'%(x,y,i)txt=pagecollect(newurl,lzname)if txt:print u'The page %s  is completed!\r'%i,else:  print u'The page %s  is None!     \r'%i,result +=txt#优先写入第一部分内容,再解锁第二部分阻塞!    writf(result,title)a.release()#解锁def runb(qi,zhi,wurl,x,y):result=''soup=bsp(wurl)lzname=soup.find('div',{'class':'atl-menu clearfix js-bbs-act'})['js_activityusername']for i in xrange(int(qi),int(zhi)+1):newurl='http://bbs.tianya.cn/post-%s-%s-%s.shtml'%(x,y,i)txt=pagecollect(newurl,lzname)if txt:print u'The page %s  is completed!\r'%i,else:  print u'The page %s  is None!     \r'%i,result +=txta.acquire()#状态为阻塞,不能执行下一步,等待上步完成后解锁!writf(result,title)b.release()def runc(qi,zhi,wurl,x,y):result=''soup=bsp(wurl)lzname=soup.find('div',{'class':'atl-menu clearfix js-bbs-act'})['js_activityusername']for i in xrange(int(qi),int(zhi)+1):newurl='http://bbs.tianya.cn/post-%s-%s-%s.shtml'%(x,y,i)txt=pagecollect(newurl,lzname)if txt:print u'The page %s  is completed!\r'%i,else:  print u'The page %s  is None!     \r'%i,result +=txtb.acquire()#状态为阻塞,不能执行下一步,等待上步完成后解锁!writf(result,title)c.release()def rund(qi,zhi,wurl,x,y):result=''soup=bsp(wurl)lzname=soup.find('div',{'class':'atl-menu clearfix js-bbs-act'})['js_activityusername']for i in xrange(int(qi),int(zhi)+1):newurl='http://bbs.tianya.cn/post-%s-%s-%s.shtml'%(x,y,i)txt=pagecollect(newurl,lzname)if txt:print u'The page %s  is completed!\r'%i,else:  print u'The page %s  is None!     \r'%i,result +=txtc.acquire()#状态为阻塞,不能执行下一步,等待上步完成后解锁!writf(result,title)d.release()def writf(result,title):#写入文件dirs=os.getcwd()fname='%s.txt'%(title)ff=open(fname,'a')ff.write(result)ff.close()def pagecollect(url,lzname): #获得当前页内容soup=bsp(url)txt=[]lzpost=soup.findAll('div',{'_host':lzname})for i in xrange(len(lzpost)):post=lzpost[i].find('div',{'class':'atl-content'}).text.encode('utf-8')txt.append(re.sub(za,'',post))return ''.join(txt)def bsp(url):turl=urllib2.urlopen(url,timeout=10).read()rsp=BeautifulSoup(turl)return rspdef pagenum(wurl):#获得URL数字位1,2,3和总页数soup=bsp(wurl)surl=wurl.split('-')z=re.search('(\d+)',surl[3]).group(0)fom=soup.find('form',{'action':'','method':'get'})['onsubmit'].split(',')zong=re.search('(\d+)',fom[3]).group(0)return surl[1],surl[2],z,zongif __name__=='__main__':wurl=raw_input('>>')x,y,z,zong=pagenum(wurl)soup=bsp(wurl)title=re.sub('_.*','',soup.title.text)print titleprint x,'-',y,'-',z,'Pages:',zongz=int(z)if int(zong)-z>=12:  #判断页数大于等于12页则用多线程fen=(int(zong)-z)/4fen=int(fen)thread.start_new_thread(runa,(z,z+1*fen,wurl,x,y))thread.start_new_thread(runb,(z+1*fen+1,z+2*fen,wurl,x,y))thread.start_new_thread(runc,(z+2*fen+1,z+3*fen,wurl,x,y))thread.start_new_thread(rund,(z+3*fen+1,zong,wurl,x,y))else:runa(z,zong,wurl,x,y)d.acquire()print 'Used %.2fs           '%(time.clock()-start_time)

转载于:https://www.cnblogs.com/langba/archive/2013/06/01/3111939.html

TianyaDL_4thread天涯帖子下载4线程版相关推荐

  1. Nodejs 天涯帖子《鹿鼎记中计》 柳成萌著 下载爬虫

    功能:从天涯帖子中下载楼主发言到一个文本文件中 实验对象:http://bbs.tianya.cn/post-no05-308123-1.shtml  <鹿鼎记中计> 柳成萌著 爬取效果: ...

  2. 多线程 python tcp 图片_Python第四周之网络编程TCP (服务器/客户端; 线程下载图片;线程版服务器和客户端(单人、多人)) UDP...

    # 网络编程 # 计算机网络, 把多台独立自主的计算机,连接到网络,实现资源的共享 # Internet网,(互联网)eniac 1946美国大学第一台电子计算机 # # 一个TCP报文除了包含要传输 ...

  3. 自己做的豆瓣帖子下载器1.0版

    豆瓣小组下载器 1.0版 - 经过 1,2个月, 利用每天晚上的时间, 终于出来了c++版豆瓣小组帖子下载工具了. 功能: 1. 支持下载豆瓣小组 及帖子页面, 欢迎来使用 2. 分析后的数据本地保存 ...

  4. 搜狗浏览器下载2015官方版最新版

    搜狗浏览器下载2015官方版 v5.2 最新版 软件大小:36.47MB 软件语言:简体中文 软件类别:网页浏览 软件授权:官方版 更新时间:2015-01-18 应用平台:/Win8/Win7/Wi ...

  5. python 抓取天涯帖子内容并保存

    python 抓取天涯帖子内容并保存 作者:大捷龙 csdn : http://blog.csdn.net/koanzhongxue ** 分析:天涯的帖子下载可以分为以下几个步骤 手动传入一个帖子首 ...

  6. Xamarin.Forms教程下载安装Windows版的Xamarin开发工具

    Xamarin.Forms教程下载安装Windows版的Xamarin开发工具 下载安装Windows版的Xamarin开发工具 本节将讲解如何下载并安装Windows版的Xamarin开发工具. 下 ...

  7. b站电脑客户端_B站(哔哩哔哩) 视频批量下载工具#电脑版##更新

    长按识别下方二维码关注 B站(哔哩哔哩) 视频下载工具#电脑版 软件介绍 这是一款可以在电脑端下载B站视频的工具 相信看过我文章的都知道以前已经推荐过一款 >>点我跳转<< 但 ...

  8. 飞秋_飞秋2010_飞秋2010下载_飞秋下载2010正式版

    以后记录飞秋读书笔记,不用传统的一条条的记录方法,正巧看了<飞秋2010思维导图>,就用图表的形式记录吧.说实话,原来条条框框的记录的笔记,有多少人是记完了就再也不曾翻开了,更不要说电子版 ...

  9. 飞秋下载2010正式版_飞秋下载

    飞秋(FeiQ) V2_FreeEIM4 简体中文绿色正式版 -聊天工具-绿色下载吧 绿_FreeEIM_FreeEIM_FreeEIM 飞秋(FeiQ) V2_FreeEIM4 简体中文绿色正式版 ...

最新文章

  1. Excel中条件格式应用的探讨之突出显示!
  2. kafka身份认证 maxwell_聊聊MaxwellKafkaProducer
  3. 2013秋浙大远程教育计算机应用基础-9计算机多媒体技术,2013秋浙大远程教育计算机应用基础-9...
  4. 项目常用工具类整理(五)--jar包整理
  5. 热模块替换html,热模块替换启用,但不能正常工作http:// localhost:3000/__ webpack_hmr...
  6. ImportError: libcublas.so.10.0: cannot open shared object file: No such file or directory
  7. java mac jconsole_解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题
  8. 嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX
  9. jquery-选择器-筛选器
  10. 06jQuery-06-AJAX
  11. 任正非:华为不会拆分;以色列公司称可解锁所有 iOS 设备;Java 13 要来了! | 极客头条...
  12. elasticsearch docker无法挂载_Docker 容器监控方案怎么选?看看这套开源方案
  13. JS学习总结(9)——String
  14. 3D控件Aspose.3D 8月新版V17.8发布 | 支持6面多维地图
  15. 15个在线网站检测工具
  16. javaweb课程设计景点门票销售系统
  17. 严蔚敏版数据结构——顺序栈
  18. 干支纪年法简便算法_不用万年历快速推算日柱干支法
  19. 线段等分/定长的实现
  20. JS 特效学习 002:图片渐显

热门文章

  1. linux端口访问规则,linux 查看开发放端口号--iptables
  2. 其他平台上测试工具的使用
  3. CUDA学习(六十三)
  4. Vagrant+VirtualBox版本的坑
  5. cocos2dx之lua项目开发中MVC框架的简单应用
  6. linux云自动化运维基础知识23(DDNS服务配置)
  7. hadoop-hdfs-ha配置-搭建
  8. 选购维生素C需要注意的事项
  9. 定位低效SQL与不同的Extra类型(转载)
  10. 用scikit-learn进行LDA降维(转载+注释)