# -*- coding:utf-8 -*-import reimport urllibimport urllib.requestimport gzip# 处理页面标签类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 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):self.baseUrl = baseUrlself.seeLZ = '?see_lz=' + str(seeLZ)self.tool = Tool()# 获得页面html代码def getPage(self, pageNum):try:url = self.baseUrl + self.seeLZ + '&pn=' + str(pageNum)print(url)request = urllib.request.Request(url)response = urllib.request.urlopen(request)data = response.read().decode('utf-8') # bytes -> strprint(type(data))# print(type(data))# data = self.ungzip(data)# self.saveFile(data)return dataexcept Exception as e:print('连接百度贴吧失败,错误原因:' + e)return None# 保存文件def saveFile(self, data):data = data.encode('utf-8') # str -> bytessavePath = 'E:\\python\\python\\bdtb.out'f_obj = open(savePath, 'wb')f_obj.write(data)f_obj.close()# 获得帖子标题def getTitle(self):page = self.getPage(1)pattern = re.compile('<h3 class="core_title_txt pull-left text-overflow ".*?>(.*?)</h3>', re.S)result = re.search(pattern, page)if result:return result.group(1).strip()else:return None# 提取帖子页数def getPageNum(self):page = self.getPage(1)pattern = re.compile('共<span class="red">(.*?)</span>', re.S)result = re.search(pattern, page)if result:return result.group(1).strip()else:return None# 提取正文内容def getContent(self, page):divStr = '<div id="post_content.*?".*?>(.*?)</div>'pattern = re.compile(divStr, re.S)items = re.findall(pattern, page)floor = 1for item in items:print(str(floor) + "楼-------------\n")print(self.tool.replace(item))floor += 1baseUrl = 'http://tieba.baidu.com/p/3138733512'bdtb = BDTB(baseUrl, 1)page = bdtb.getPage(1)bdtb.getContent(page)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。