Python爬虫-爬取百度贴吧的帖子并写入文件

项目代码地址: ===欢迎fork 、star ===

https://github.com/kangvcar/pyproject/blob/master/Spiders/Spider_tieba.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2017-09-28 23:10:56
# @Author  : kangvcar ([email protected])
# @Link    : http://www.github.com/kangvcar/
# @Version : $Id$

import urllib
import urllib2
import re

#处理页面标签类
class Tool:
	#去除img标签,7位长空格
	removeImg = re.compile('| {7}|')
	#删除超链接标签
	removeAddr = re.compile('|')	
	#把换行的标签换为\n
	replaceLine = re.compile('|
|
|

') #将表格制表替换为\t repalceTD = re.compile('') #把段落开头换为\n加空两格 replacePara = re.compile('') #将换行符或双换行符替换为\n replaceBR = re.compile('

|
') #将其余标签剔除 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.repalceTD, "\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): #base链接地址 self.baseUrl = baseUrl #是否只看楼主 self.seeLZ = '?see_lz='+str(seeLZ) #HTML标签剔除工具类对象 self.tool = Tool() #全局file变量,文件写入操作对象 self.file = None #楼层标号,初始为1 self.floor = 1 #默认的标题,如果没有成功获取到标题的话则会用这个标题 self.defaultTitle = u"百度贴吧" #是否写入楼分隔符的标记 self.floorTag = floorTag #传入页码,获取该页帖子的代码 def getPage(self, pageNum): try: #构建URL url = self.baseUrl+self.seeLZ+'&pn='+str(pageNum) request = urllib2.Request(url) response = urllib2.urlopen(request) #返回UTF-8格式编码内容 return response.read().decode('utf-8') #无法连接,报错 except urllib2.URLError, e: if hasattr(e, "reason") print u"连接百度贴吧失败,错误原因:", e.reason return None #获取帖子标题 def getTitle(self, page): #得到标题的正则表达式 pattern = re.compile('

.*?(.*?)', 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('



你可能感兴趣的:(Python,Python,爬虫,爬虫贴吧)