# -*- coding:utf-8 -*- import urllib import urllib2 import re class Tool: removeImg = re.compile('<img.*?>| {7}|') removeAddr = re.compile('<a.*?>|</a>') replaceLine = re.compile('<tr>|<div>|</div>|</p>') replaceTD = re.compile('<td>') replacePara = re.compile('<p.*?>') replaceBR = re.compile('<br><brr>|<br>') removeExtraTag = re.compile('<.*?>') removeSpace = re.compile(' ') def replace(self,x): x = re.sub(self.removeImg,"",x) x = re.sub(self.removeAddr,"",x) x = re.sub(self.replaceLine,"\n",x) x = re.sub(self.replaceTD,"\t",x) x = re.sub(self.replacePara,"\n ",x) x = re.sub(self.replaceBR,"\n",x) x = re.sub(self.removeExtraTag,"",x) x = re.sub(self.removeSpace," ",x) return x.strip() class BDTB: def __init__(self,baseURL,seeLZ,floorTag): self.baseURL = baseURL self.seeLZ = '?see_lz='+str(seeLZ) self.tool = Tool() self.file = None self.floor = 1 self.defaultTitle = u"百度贴吧" #默认的标题,如果没有成功获取到标题的话则会用这个标题 self.floorTag = floorTag def getPage(self,pageNum): try: url = self.baseURL+self.seeLZ + '&pn=' + str(pageNum) request = urllib2.Request(url) response = urllib2.urlopen(request) return response.read().decode('utf-8') except urllib2.URLError,e: if hasattr(e,"reason"): print "fail to connect,reason:",e.reason return None def getTitle(self,page): pattern = re.compile('class="core_title_txt pull-left text-overflow " title="(.*?)" style="',re.S) result = re.search(pattern,page) if result: return result.group(1).strip() else: return None def getPageNum(self,page): pattern = re.compile('<li class="l_reply_num".*?>*?</span>.*?<span.*?>(.*?)</span>') result = re.search(pattern,page) if result: return result.group(1).strip() else: return None def getContent(self,page): pattern = re.compile(ur'<div id="post_content_.*?>(.*?)</div>.*?<span class="tail-info">.*?[\u697c]</span><span class="tail-info">(.*?)</span></div>',re.S) items = re.findall(pattern,page) pattern_author=re.compile('alog-group="p_author".*?target="_blank">(.*?)</a>') authors=re.findall(pattern_author,page) contents = [] p=0 for item in items: content = "\n"+self.tool.replace(item[0])+"\n" date="\n"+item[1]+"\n" dataX=content+date+authors[p] contents.append(dataX.encode('utf-8')) p=p+1 return contents def setFileTitle(self,title): if title is not None: self.file = open(title + ".txt","w+") else: self.file = open(self.defaultTitle + ".txt","w+") def writeData(self,contents): for item in contents: if self.floorTag == '1': floorLine = "\n" + str(self.floor) + u"-----------------------------------------------------------------------------------------\n" self.file.write(floorLine) self.file.write(item) self.floor += 1 def start(self): indexPage = self.getPage(1) pageNum = self.getPageNum(indexPage) title = self.getTitle(indexPage) self.setFileTitle(title) if pageNum == None: print "URL已失效,请重试" return try: print "该帖子共有" + str(pageNum) + "页" for i in range(1,int(pageNum)+1): print "正在写入第" + str(i) + "页数据" page = self.getPage(i) contents = self.getContent(page) self.writeData(contents) except IOError,e: print "写入异常,原因:" + e.message finally: print "写入任务完成!!!" print u"请输入帖子代号" baseURL = 'http://tieba.baidu.com/p/' + str(raw_input(u'http://tieba.baidu.com/p/')) seeLZ = raw_input("是否只获取楼主发言,是输入1,否输入0\n") floorTag = raw_input("是否写入楼层信息,是输入1,否输入0\n") bdtb = BDTB(baseURL,seeLZ,floorTag) bdtb.start()
近期热议
推荐标签 标签
-
Ruby
7 引用 • 31 回帖 • 262 关注
Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。
-
Caddy
10 引用 • 54 回帖 • 182 关注
Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。
-
开源中国
7 引用 • 86 回帖
开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。
-
WebSocket
48 引用 • 206 回帖 • 281 关注
WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。
-
DevOps
59 引用 • 25 回帖 • 2 关注
DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
-
NetBeans
78 引用 • 102 回帖 • 707 关注
NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。
-
深度学习
43 引用 • 44 回帖
深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。
-
SQLServer
21 引用 • 31 回帖 • 1 关注
SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。
-
Outlook
1 引用 • 5 回帖 • 1 关注
-
百度
63 引用 • 785 回帖 • 70 关注
百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。
-
VirtualBox
10 引用 • 2 回帖 • 18 关注
VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。
-
工具
300 引用 • 768 回帖
子曰:“工欲善其事,必先利其器。”
-
旅游
98 引用 • 903 回帖
希望你我能在旅途中找到人生的下一站。
-
LeetCode
209 引用 • 72 回帖
LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!
-
书籍
82 引用 • 412 回帖
宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”
-
CentOS
240 引用 • 224 回帖
CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。
-
OneDrive
2 引用 • 6 关注
-
设计模式
201 引用 • 120 回帖 • 1 关注
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
-
互联网
98 引用 • 367 回帖
互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。
-
TensorFlow
20 引用 • 19 回帖 • 3 关注
TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。
-
AngularJS
12 引用 • 50 回帖 • 523 关注
AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。
-
Mac
167 引用 • 597 回帖 • 1 关注
Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。
-
Bootstrap
18 引用 • 33 回帖 • 648 关注
Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。
-
V2EX
16 引用 • 236 回帖 • 243 关注
V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。
-
Q&A
10055 引用 • 45693 回帖 • 69 关注
提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。
-
Redis
284 引用 • 248 回帖 • 1 关注
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。
-
RIP
8 引用 • 92 回帖 • 408 关注
愿逝者安息!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于