1. #coding=utf-8
  2. import urllib2
  3. import urllib
  4. import re
  5. # 处理页面标签类
  6. class Tool:
  7. # 去除img标签,7位长空格
  8. removeImg = re.compile(r'<img.*?>| {7}|')
  9. # 删除超链接标签
  10. removeAddr = re.compile('<a.*?>|</a>')
  11. # 把换行标签换位\n
  12. replaceLine = re.compile('<tr>|<div>|</div|</p>')
  13. # 将制表<td>换位\t
  14. replaceTD = re.compile('<td>')
  15. # 将段落开头换为\n加两空格
  16. replacePara = re.compile('<p.*?>')
  17. # 将换行符或双换行符换为\n
  18. replaceBR = re.compile('<br><br>|<br>')
  19. # 删除其他标签
  20. removeExtraTag = re.compile('<.*?>')
  21. def replace(self,x):
  22. x = re.sub(self.removeImg,"",x)
  23. x = re.sub(self.removeAddr,"",x)
  24. x = re.sub(self.replaceLine,"\n",x)
  25. x = re.sub(self.replaceTD,"\t",x)
  26. x = re.sub(self.replacePara,"\n",x)
  27. x = re.sub(self.replaceBR,"\n",x)
  28. x = re.sub(self.removeExtraTag,"",x)
  29. # 将前后多余的内容删除
  30. return x.strip()
  31. # 百度贴吧爬虫类
  32. class BDTB:
  33. # 初始化,传入基地址,传入是否“只看楼主”参数
  34. def __init__(self,baseUrl,seeLz,floorTag):
  35. # base连接地址
  36. self.basURL = baseUrl
  37. # 是否只看楼主
  38. self.seeLZ = '?see_lz='+str(seeLz)
  39. # 工具类
  40. self.tool = Tool()
  41. # 全局file变量,文件写入操作对象
  42. self.file = None
  43. # 楼层标号,初始为1
  44. self.floor = 1
  45. # 默认的标题
  46. self.defaultTitle = u"百度贴吧"
  47. # 是否写入楼分隔符的标记
  48. self.floorTag = floorTag
  49. # 获取该页(pageNum)的代码
  50. def getPage(self,pageNum):
  51. try:
  52. url = self.basURL + self.seeLZ + '&pn=' + str(pageNum)
  53. request = urllib2.Request(url)
  54. response = urllib2.urlopen(request)
  55. # 返回utf-8格式编码内容
  56. return response.read().decode('utf-8')
  57. except urllib2.URLError,e:
  58. if hasattr(e,"reason"):
  59. print u"连接百度贴吧失败,错误原因",e.reason
  60. return None
  61. # 获得页面标题
  62. def getTitle(self,page):
  63. # 获取标题的正则表达式
  64. pattern = re.compile(r'<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
  65. result = re.search(pattern, page)
  66. if result:
  67. return result.group(1).strip()
  68. else:
  69. return None
  70. # 提取页数
  71. def getPageNum(self,page):
  72. # 获取页数的正则表达式
  73. pattern = re.compile(r'reply_num.*?</span.*?class="red">(.*?)</span>',re.S)
  74. result = re.search(pattern,page)
  75. if result:
  76. return result.group(1).strip()
  77. else:
  78. return None
  79. # 提取内容
  80. def getContent(self,page):
  81. pattern = re.compile(r'post_content.*?>(.*?)</div>',re.S)
  82. items = re.findall(pattern,page)
  83. contents = []
  84. for item in items:
  85. #将文本内容进行处理,同时在前后加上换行符
  86. content = "\n" + self.tool.replace(item)+"\n"
  87. contents.append(content.encode('utf-8'))
  88. return contents
  89. def setFileTitle(self,title):
  90. if title is not None:
  91. self.file = open(title+".txt","w+")
  92. else:
  93. self.file = open(self.defaultTitle+".txt","w+")
  94. # 写文件
  95. def writeData(self,contents):
  96. for item in contents:
  97. if self.floorTag == "1":
  98. floorLine = "\n"+str(self.floor)+u"--------------------------------------\n"
  99. self.file.write(floorLine)
  100. self.file.write(item)
  101. self.floor += 1
  102. def start(self):
  103. indexPage = self.getPage(1)
  104. pageNum = self.getPageNum(indexPage)
  105. title = self.getTitle(indexPage)
  106. self.setFileTitle(title)
  107. if pageNum == None:
  108. print u"URL已失效,请重试"
  109. return
  110. try:
  111. print "该帖子共有"+str(pageNum)+"页。"
  112. for i in range(1,int(pageNum)+1):
  113. print "正在写入第"+str(i)+"页数据"
  114. page = self.getPage(i)
  115. contents = self.getContent(page)
  116. self.writeData(contents)
  117. except IOError,e:
  118. print "写入异常,原因:"+e.message
  119. finally:
  120. print "写入完成"
  121. baseURL = 'http://tieba.baidu.com/p/3138733512'
  122. seeLz = raw_input("是否只获取楼主发言,是输入1,否输入0\n")
  123. floorTag = raw_input('是否写入楼层信息,是输入1,否输入0\n')
  124. bdtb = BDTB(baseURL,seeLz,floorTag)
  125. bdtb.start()
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/aniudcs/p/ff8bf2f784e6207675c0571ff4470be7.html

Python爬虫(三)--百度贴吧相关推荐

  1. python爬虫获取百度贴吧内容

    python爬虫获取百度贴吧内容 python爬虫获取百度贴吧内容 *声明:本文仅供学习交流使用,请勿用于商业用途,违者后果自负.* python爬虫获取百度贴吧内容 博主是一个比较懒的人,不会按时更 ...

  2. python爬虫案例——百度贴吧数据采集

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python爬虫案例--百度贴吧数据采集 通过python实现百度贴吧页面的内容采集是相对来说比较容易的,因为百度贴吧不需要登陆,不需要coo ...

  3. python爬虫——三步爬得电影天堂电影下载链接,30多行代码即可搞定:

    python爬虫--三步爬得电影天堂电影下载链接,30多行代码即可搞定: 本次我们选择的爬虫对象是:https://www.dy2018.com/index.html 具体的三个步骤:1.定位到202 ...

  4. Python 爬虫 - 获取百度关键字搜索内容

    Python 爬虫 获取百度关键字搜索内容 https://www.cnblogs.com/w0000/p/bd_search_page.html Github headers内的参数,仅有UA时,返 ...

  5. 【python 爬虫】百度手机助手爬虫

    一.需求分析: 抓取百度手机助手软件应用,导出EXCEL和插入mysql.字段包括: 1. app_name:应用名称2. app_pic:应用logo3. app_score:应用评分4. app_ ...

  6. 简单几步实现网络音乐播放器(Python爬虫版百度FM)

    Python入门之爬取百度音乐 先说一下为什么会有这篇文章,首先肯定是有这个需求了,本人出差在外地,这里的网速卡到爆,根本支撑不了在线听歌的要求,所以就想下载到本地来慢慢听.这可是python的绝活, ...

  7. 利用Python爬虫从百度百科获取全国所有县区的地理信息

      最近因为工作需要,需要从百度百科获得全国近3000个县区的位置.地貌.气候.水文等地理信息.因为自己对爬虫有些兴趣,就尝试用Python爬虫来获得这些数据,也算是自己对爬虫的学习过程吧.因为学习爬 ...

  8. 用Python爬虫获取百度企业信用中企业基本信息!太厉害了!

    一.背景 希望根据企业名称查询其经纬度,所在的省份.城市等信息.直接将企业名称传给百度地图提供的API,得到的经纬度是非常不准确的,因此希望获取企业完整的地理位置,这样传给API后结果会更加准确.百度 ...

  9. 爬虫python下载-如何用Python爬虫实现百度图片自动下载?

    制作爬虫的步骤 制作一个爬虫一般分以下几个步骤: 分析需求 分析网页源代码,配合开发者工具 编写正则表达式或者XPath表达式 正式编写 python 爬虫代码 效果预览 运行效果如下: 存放图片的文 ...

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

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

最新文章

  1. 取消tableView多余的横线
  2. 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)
  3. 一年春事,桃花红了谁……
  4. Linux下gcc编译中关于头文件与库文件搜索路径相关问题
  5. Top K算法问题的实现
  6. JSON 是什么?它能带来什么?它和 XML 比较?
  7. html中如何实现选择存储路径的功能_16687.VSM006分解03_如何打开HTML内嵌图像存储位置...
  8. 老司机教你分析日志:分析用户的地理位置信息
  9. runas/cpau/lsrunase使用小结(以管理员运行指定程序)
  10. python3.6_发送邮件
  11. 阿里云国际版ECS,虚拟主机和VPS托管之间的区别
  12. python怎么隐藏输入法_打开和关闭输入法
  13. 【OpenGL】查看显卡对OpenGL的支持程度
  14. latex backmatter 是什么意思
  15. TN905红外测温驱动
  16. MySQL全版本安装步骤
  17. 荣耀6x升级Android8省电,HONOR 荣耀 畅玩 6X 手机升级EMUI8.0,怎一个“爽”字了得?...
  18. 网页音效简易解决方案audiosprite
  19. 【计算机网络学习笔记09】ARP地址解析协议
  20. 如何隐藏任务栏图标小结(zz)

热门文章

  1. [Linux][Ubuntu][14.04.3LTS]安装NVidia显卡驱动
  2. 通过路径传值id进行页面判断
  3. JavaEE平台学习之 01开发第一个Servlet程序
  4. NeHe_Lesson8 Blending
  5. Logic Pro X for Mac - 音乐制作软件
  6. Mac电脑问题:磁盘读写NTFS怎么不行?
  7. mysql命令常用参数实例讲解
  8. unity打包IOS填坑1
  9. 图片加载库之Glide和Picasso对比
  10. Javascript本地存储小结