本文同样是基于静觅系列python3.x版,具体步骤请前往静觅系列学习

关于encode()与decode()的问题:可以参照xanderzhang 及921800467的专栏

可完成静觅系列相同功能,正则表达式目前有效,源码如下:

#-*- coding:utf-8 -*-
import urllib.request
import re #处理页面标签类
class TOOL:#去除img标签,7位长空格removeImg = re.compile('<img.*?>| {7}|')#删除超链接标签removeAddr = re.compile('<a.*?>|</a>')#把换行的标签换为\nreplaceLine = re.compile('<tr>|<div>|</div>|</p>')#将表格制表<td>替换为\treplaceTD= re.compile('<td>')#把段落开头换为\n加空两格replacePara = re.compile('<p.*?>')#将换行符或双换行符替换为\nreplaceBR = re.compile('<br><br>|<br>')#将其余标签剔除removeExtraTag = 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)#strip()将前后多余内容删除return x.strip()class BDTB:#初始化,传入基地址,是否只看楼主的参数def __init__(self,baseUrl,seeLZ,floorTag):self.baseUrl=baseUrlself.seeLZ='?see_lz='+str(seeLZ)self.tool=TOOL()#全局file变量,文件写入操作对象self.file = None#楼层标号,初始为1self.floor = 1#默认的标题,如果没有成功获取到标题的话则会用这个标题self.defaultTitle = u"百度贴吧"#是否写入楼分隔符的标记self.floorTag = floorTag#传入页码,获取该页帖子的代码def getPage(self,pageNum):url=self.baseUrl+self.seeLZ+'&pn='+str(pageNum)request=urllib.request.Request(url)response=urllib.request.urlopen(request)#print(response.read())return response.read().decode('utf-8')#3.0现在的参数更改了,现在读取的是bytes-like的,但参数要求是chart-like的,加了个编码#获取帖子标题def getTitle(self,page):      pattern = re.compile('<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)#re.s整体匹配result = re.search(pattern,page)if result:#print result.group(1)  #测试输出return result.group(1).strip()else:return None#获取帖子共有多少页def getPageNum(self,page):pattern = re.compile('<li class="l_reply_num.*?</span>.*?<span.*?>(.*?)</span>',re.S)result = re.search(pattern,page)if result:#print result.group(1)  #测试输出return result.group(1).strip()else:return None#获取每一层楼的内容,传入页面内容def getContent(self,page):pattern = re.compile('<div id="post_content_.*?>(.*?)</div>',re.S)items = re.findall(pattern,page)#以列表形式返回匹配的字符串contents=[]for item in items:content="\n"+self.tool.replace(item)+"\n"contents.append(content.encode('utf-8'))            return contentsdef setFileTitle(self,title):#如果标题不是为None,即成功获取到标题if title is not None:self.file = open(title + ".txt","wb")else:self.file = open(self.defaultTitle + ".txt","wb")def writeData(self,contents):#向文件写入每一楼的信息for item in contents:if self.floorTag == '1':#楼之间的分隔符floorLine = "\n" + str(self.floor) + u"-----------------------------------------------------------------------------------------\n"self.file.write(floorLine.encode())self.file.write(item)self.floor += 1def start(self):indexPage = self.getPage(1)pageNum = self.getPageNum(indexPage)title = self.getTitle(indexPage)self.setFileTitle(title)if pageNum == None:print("URL已失效,请重试")returnprint("该帖子共有" + str(pageNum) + "页")for i in range(1,int(pageNum)+1):print("正在写入第" + str(i) + "页数据")page = self.getPage(i)contents = self.getContent(page)self.writeData(contents)print(u"写入任务完成")
print(u"请输入帖子代号")
baseURL = 'http://tieba.baidu.com/p/' + str(input(u'http://tieba.baidu.com/p/'))
seeLZ = input("是否只获取楼主发言,是输入1,否输入0\n")
floorTag = input("是否写入楼层信息,是输入1,否输入0\n")
bdtb = BDTB(baseURL,seeLZ,floorTag)
bdtb.start()

python爬虫小项目: 爬取百度贴吧帖子相关推荐

  1. Python爬虫实战之爬取百度贴吧帖子

    Python爬虫实战之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的 ...

  2. 百度贴吧界面html程序代码,python爬虫例题:爬取百度贴吧评论区图片和视频

    百度贴吧是全球最大的中文交流平台,你是否跟我一样,有时候看到评论区的图片想下载呢?或者看到一段视频想进行下载呢? 今天,本期Python教程带大家通过搜索关键字来获取评论区的图片和视频. [二.项目目 ...

  3. Python爬虫实战之爬取百度音乐歌曲

    Python爬虫爬取百度音乐歌曲 整体思路如下: 1.搜索:通过搜索界面输入歌手名字找到歌手的歌曲信息.千千音乐:网址 2.找到歌曲信息:通过遍历歌曲列表信息界面获取每个歌曲的ID,以及歌曲的总数 3 ...

  4. python爬取百度百科表格_第一个python爬虫(python3爬取百度百科1000个页面)

    以下内容参考自:http://www.imooc.com/learn/563 一.爬虫简介 爬虫:一段自动抓取互联网信息的程序 爬虫可以从一个url出发,访问其所关联的所有的url.并从每个url指向 ...

  5. python爬百度贴吧_Python爬虫实战之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖内 ...

  6. python贴吧爬虫-Python 爬虫练习: 爬取百度贴吧中的图片

    背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...

  7. python 爬虫案例:爬取百度贴吧图片

    文章更新于:2020-04-24 注1:打包后的程序(无需python环境)下载参见:https://ww.lanzous.com/ibvwref 注2:更多爬虫案例参见:https://github ...

  8. 爬虫小案例 爬取百度贴吧赵丽颖图片案例 xpath 美丽汤

    美丽汤版本: import requests from bs4 import BeautifulSoup import os from hashlib import md5def get_html(u ...

  9. python爬虫(13)爬取百度贴吧帖子

    爬取百度贴吧帖子 一开始只是在网上看到别人写的爬取帖子的文章,然后自己就忍不住手痒自己锻炼一下, 然后照着别人的写完,发现不太过瘾, 毕竟只是获取单个帖子的内容,感觉内容稍显单薄,然后自己重新做了修改 ...

最新文章

  1. Spring boot、微服务、OAuth、OpenID的爱恨情仇!
  2. mysql group replication 安装配置详解
  3. Ubuntu 16.04 下octave的使用入门
  4. c语言的四个函数,C语言学习之动态内存分配的四个函数
  5. 【其他】命名风格之unix like风格,Windows风格,ST固件库风格,驼峰命名
  6. 软件工程学习进度06
  7. android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术
  8. python图像对比度增强图片清晰度_Python 图像对比度增强的几种方法(小结)
  9. 各种推荐算法的 benchmark
  10. Yahoo Web UIs——Java开发者丰富的Web UI
  11. acm竞赛使用python的多吗_我该参加acm竞赛吗?
  12. maxscript文件常规命令
  13. 关系代数表达式优化步骤
  14. android脚本精灵开发,触动精灵脚本开发示例代码
  15. jar启动出错:Failed to get nested archive for entry BOOT-INF/lib/activiti-core-common-dependencies-7.1.0
  16. python拟合统计分布_利用 Python Fitter 判断数据样本符合那种分布函数
  17. 英伟达显卡笔记本如何免费获得2k甚至4k屏幕
  18. android 最好的gtd软件,Windows 上的高颜值 GTD 应用,这可能是最棒的一款了:MyerList...
  19. PYNQ-Z1 资源分析
  20. 求整型矩阵主对角线元素之和

热门文章

  1. P1135 奇怪的电梯题解
  2. 阿里云李克:阿里云边缘云计算的技术和实践
  3. 使用nginx配置图片代理
  4. 大数据对电子商务行业的影响,主要体现在哪几方面?
  5. 小i机器人智慧法律服务亭:百姓身边的法律武器
  6. vue手把手教你实现论坛bbs——(一)项目骨架
  7. mvdbos php spider,Scrapy-Redis分布式爬取自如网(一)
  8. echarts实现刻度尺
  9. mmdetection运行demo出现 no attribute ‘__version__‘
  10. 0-1整数规划的LINGO求解