#-*- coding:utf-8 -*-#!/user/bin/python

importurllibimporturllib2importre#处理页面标签类

classTool:#去除img标签,7位长空格

removeImg = re.compile('| {7}|')#删除超链接标签

removeAddr = re.compile('|')#把换行的标签换为

replaceLine = re.compile('

|

|')#将表格制表替换为

replaceTD= re.compile('

')#把段落开头换为 加空两格

replacePara = re.compile('

')#将换行符或双换行符替换为

replaceBR = re.compile('

|
')#将其余标签剔除

removeExtraTag = re.compile('<.*?>')defreplace(self,x):

x= re.sub(self.removeImg,"",x)

x= re.sub(self.removeAddr,"",x)

x= re.sub(self.replaceLine," ",x)

x= re.sub(self.replaceTD," ",x)

x= re.sub(self.replacePara," ",x)

x= re.sub(self.replaceBR," ",x)

x= re.sub(self.removeExtraTag,"",x)#strip()将前后多余内容删除

returnx.strip()classBDTB:#初始化,传入基地址,是否只看楼主的参数

def __init__(self, baseUrl, seeLZ, floorTag):

self.baseURL=baseUrl

self.seeLZ= '?see_lz=' +str(seeLZ)

self.tool=Tool()#全局file变量,文件写入操作对象

self.file =None#楼层标号, 初始化为1

self.floor = 1

#默认标题

self.defaultTitle = u"百度某某贴吧"

#是否写入楼层分隔符标记

self.floorTag =floorTag#传入页码,获取该页帖子的代码

defgetPage(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')excepturllib2.URLError, e:if hasattr(e, "reason"):print u"连接百度贴吧失败,错误原因", e.reasonreturnNone#获得帖子标题

defgetTitle(self,page):

page= self.getPage(1)

pattern= re.compile('

(.*?)

', re.S)

result=re.search(pattern, page)ifresult:#print result.group(1)

return result.group(1).strip()else:returnNone#得到帖子页数

defgetPageNum(self,page):

page= self.getPage(1)

pattern= re.compile('

(.*?)',re.S)

result=re.search(pattern, page)ifresult:#print "回复个数:"

#print result.group(1)

return result.group(1).strip()else:returnNone#获得帖子的内容

defgetContent(self,page):

page= self.getPage(1)

pattern= re.compile('

(.*?)

',re.S)

items=re.findall(pattern,page)

contents=[]

floor= 1

for item initems:

content= " " + self.tool.replace(item) + " "contents.append(content.encode('utf-8'))#print self.tool.replace(item)

#floor += 1

returncontentsdefsetFileTitle(self,title):if title is notNone:

self.file= open(title + ".txt", "w+")else:

self.file= open(self.defaultTitle + ".txt", "w+")defwriteData(self,contents):for item incontents:if self.floorTag == '1':

floorline= " " + str(self.floor) + u"------------------------------------- "self.file.write(floorline)

self.file.write(item)

self.floor+= 1

defstart(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)exceptIOError,e:print "写入异常,原因" +e.messagefinally:print "Succeed~"

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()

python爬虫吧-Python爬虫——抓取贴吧帖子相关推荐

  1. 关于Python爬虫原理和数据抓取1.1

    为什么要做爬虫? 首先请问:都说现在是"大数据时代",那数据从何而来? 企业产生的用户数据:百度指数.阿里指数.TBI腾讯浏览指数.新浪微博指数 数据平台购买数据:数据堂.国云数据 ...

  2. python爬虫百度百科-python爬虫(一)_爬虫原理和数据抓取

    本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...

  3. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  4. python爬虫beautifulsoup爬当当网_Python爬虫包 BeautifulSoup 递归抓取实例详解_python_脚本之家...

    Python爬虫包 BeautifulSoup  递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到 ...

  5. Python爬虫包 BeautifulSoup 递归抓取实例详解

    Python爬虫包 BeautifulSoup 递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到另 ...

  6. [Python爬虫] 三、数据抓取之Requests HTTP 库

    往期内容提要: [Python爬虫] 一.爬虫原理之HTTP和HTTPS的请求与响应 [Python爬虫] 二.爬虫原理之定义.分类.流程与编码格式 一.urllib 模块 所谓网页抓取,就是把URL ...

  7. Python爬虫之gif图片抓取

    Python爬虫之gif图片抓取 标签:图片爬虫 这几天,对于怎么去爬取图片很感兴趣,就研究了一下,图片爬虫可以说是有简单,更有复杂的,今天,我做了一个比较简单的gif的图片爬虫,仅仅学习一下怎么进行 ...

  8. Python,网络爬虫selenium与pyautogui抓取新浪微博用户数据

    Python,网络爬虫selenium与pyautogui抓取新浪微博用户数据 不需要登陆新浪微博账户,直接运行就可以通过python爬虫爬取新浪微博用户数据.本例selenium与pyautogui ...

  9. [Python爬虫] 四、数据抓取之HTTP/HTTPS抓包工具Fiddler

    往期内容提要: [Python爬虫] 一.爬虫原理之HTTP和HTTPS的请求与响应 [Python爬虫] 二.爬虫原理之定义.分类.流程与编码格式 [Python爬虫] 三.数据抓取之Request ...

  10. Python学习笔记——爬虫之urllib数据抓取

    目录 urllib库的基本使用 Get方式 POST方式: 获取AJAX加载的内容 Handler处理器 和 自定义Opener urllib库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资 ...

最新文章

  1. css块级元素与行级元素
  2. 【.NET】正则表达式笔记
  3. 机电传动控制课程第一周学习笔记
  4. 2017-9-17pat甲级 B
  5. 51nod1237 最大公约数之和 V3
  6. MySQL登录后显示mariadb_mysql/mariadb学习记录——连接查询(JOIN)
  7. phpbreak跳出几层循环_PHP跳出循环之“break”
  8. 阿里巴巴合伙人闻佳:创新背后的文化与组织
  9. DNS resource record的写法
  10. C#中RestoreDirectory属性
  11. rancher k8s docker 关系_CentOS7下利用Rancher搭建K8s集群
  12. golang学习之远程木马demo编写
  13. Office2013图标出现白板的解决办法
  14. elementui 时间选择框选中后限制前后31天
  15. 大一Web课程设计:企业网站——HTML+CSS+JavaScript电子购物商城(37页面)
  16. 电脑重装系统后文件怎么恢复
  17. Shiro-02-subject与session
  18. 用moment将时间戳格式化为周几 几月几日
  19. android 清理后自动重启,解决Android后台清理APP后,程序自动重启的问题
  20. AI专家喋喋不休展开争论 为什么说预测是智能的本质

热门文章

  1. codevs 2606 约数和(分块优化数学公式 )
  2. Docker学习笔记之在开发环境中使用服务发现
  3. 【题解】HNOI2008GT考试
  4. 使用 mysql workbench 建议
  5. eclipse恢复默认布局
  6. 在两个页面间翻转设置Animation动作的一些总结
  7. 什么是脏读,不可重复读,幻读
  8. 【浙大网新图灵通讯】无废话简单高效C#编码规范20100611
  9. The Singleton of Design Pattern单态模式
  10. 5.springMVC数据回显(就是后台向页面传参的过程)