Python爬虫(三)--百度贴吧
#coding=utf-8
import urllib2
import urllib
import re
# 处理页面标签类
class Tool:
# 去除img标签,7位长空格
removeImg = re.compile(r'<img.*?>| {7}|')
# 删除超链接标签
removeAddr = re.compile('<a.*?>|</a>')
# 把换行标签换位\n
replaceLine = re.compile('<tr>|<div>|</div|</p>')
# 将制表<td>换位\t
replaceTD = re.compile('<td>')
# 将段落开头换为\n加两空格
replacePara = re.compile('<p.*?>')
# 将换行符或双换行符换为\n
replaceBR = 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)
# 将前后多余的内容删除
return x.strip()
# 百度贴吧爬虫类
class BDTB:
# 初始化,传入基地址,传入是否“只看楼主”参数
def __init__(self,baseUrl,seeLz,floorTag):
# base连接地址
self.basURL = baseUrl
# 是否只看楼主
self.seeLZ = '?see_lz='+str(seeLz)
# 工具类
self.tool = Tool()
# 全局file变量,文件写入操作对象
self.file = None
# 楼层标号,初始为1
self.floor = 1
# 默认的标题
self.defaultTitle = u"百度贴吧"
# 是否写入楼分隔符的标记
self.floorTag = floorTag
# 获取该页(pageNum)的代码
def getPage(self,pageNum):
try:
url = self.basURL + 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(r'<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
result = re.search(pattern, page)
if result:
return result.group(1).strip()
else:
return None
# 提取页数
def getPageNum(self,page):
# 获取页数的正则表达式
pattern = re.compile(r'reply_num.*?</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):
pattern = re.compile(r'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 contents
def setFileTitle(self,title):
if title is not None:
self.file = open(title+".txt","w+")
else:
self.file = open(self.defaultTitle+".txt","w+")
# 写文件
def writeData(self,contents):
for item in contents:
if self.floorTag == "1":
floorLine = "\n"+str(self.floor)+u"--------------------------------------\n"
self.file.write(floorLine)
self.file.write(item)
self.floor += 1
def start(self):
indexPage = self.getPage(1)
pageNum = self.getPageNum(indexPage)
title = self.getTitle(indexPage)
self.setFileTitle(title)
if pageNum == None:
print u"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)
except IOError,e:
print "写入异常,原因:"+e.message
finally:
print "写入完成"
baseURL = 'http://tieba.baidu.com/p/3138733512'
seeLz = raw_input("是否只获取楼主发言,是输入1,否输入0\n")
floorTag = raw_input('是否写入楼层信息,是输入1,否输入0\n')
bdtb = BDTB(baseURL,seeLz,floorTag)
bdtb.start()
转载于:https://www.cnblogs.com/aniudcs/p/ff8bf2f784e6207675c0571ff4470be7.html
Python爬虫(三)--百度贴吧相关推荐
- python爬虫获取百度贴吧内容
python爬虫获取百度贴吧内容 python爬虫获取百度贴吧内容 *声明:本文仅供学习交流使用,请勿用于商业用途,违者后果自负.* python爬虫获取百度贴吧内容 博主是一个比较懒的人,不会按时更 ...
- python爬虫案例——百度贴吧数据采集
全栈工程师开发手册 (作者:栾鹏) python教程全解 python爬虫案例--百度贴吧数据采集 通过python实现百度贴吧页面的内容采集是相对来说比较容易的,因为百度贴吧不需要登陆,不需要coo ...
- python爬虫——三步爬得电影天堂电影下载链接,30多行代码即可搞定:
python爬虫--三步爬得电影天堂电影下载链接,30多行代码即可搞定: 本次我们选择的爬虫对象是:https://www.dy2018.com/index.html 具体的三个步骤:1.定位到202 ...
- Python 爬虫 - 获取百度关键字搜索内容
Python 爬虫 获取百度关键字搜索内容 https://www.cnblogs.com/w0000/p/bd_search_page.html Github headers内的参数,仅有UA时,返 ...
- 【python 爬虫】百度手机助手爬虫
一.需求分析: 抓取百度手机助手软件应用,导出EXCEL和插入mysql.字段包括: 1. app_name:应用名称2. app_pic:应用logo3. app_score:应用评分4. app_ ...
- 简单几步实现网络音乐播放器(Python爬虫版百度FM)
Python入门之爬取百度音乐 先说一下为什么会有这篇文章,首先肯定是有这个需求了,本人出差在外地,这里的网速卡到爆,根本支撑不了在线听歌的要求,所以就想下载到本地来慢慢听.这可是python的绝活, ...
- 利用Python爬虫从百度百科获取全国所有县区的地理信息
最近因为工作需要,需要从百度百科获得全国近3000个县区的位置.地貌.气候.水文等地理信息.因为自己对爬虫有些兴趣,就尝试用Python爬虫来获得这些数据,也算是自己对爬虫的学习过程吧.因为学习爬 ...
- 用Python爬虫获取百度企业信用中企业基本信息!太厉害了!
一.背景 希望根据企业名称查询其经纬度,所在的省份.城市等信息.直接将企业名称传给百度地图提供的API,得到的经纬度是非常不准确的,因此希望获取企业完整的地理位置,这样传给API后结果会更加准确.百度 ...
- 爬虫python下载-如何用Python爬虫实现百度图片自动下载?
制作爬虫的步骤 制作一个爬虫一般分以下几个步骤: 分析需求 分析网页源代码,配合开发者工具 编写正则表达式或者XPath表达式 正式编写 python 爬虫代码 效果预览 运行效果如下: 存放图片的文 ...
- [Python爬虫] 三、数据抓取之Requests HTTP 库
往期内容提要: [Python爬虫] 一.爬虫原理之HTTP和HTTPS的请求与响应 [Python爬虫] 二.爬虫原理之定义.分类.流程与编码格式 一.urllib 模块 所谓网页抓取,就是把URL ...
最新文章
- 取消tableView多余的横线
- 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)
- 一年春事,桃花红了谁……
- Linux下gcc编译中关于头文件与库文件搜索路径相关问题
- Top K算法问题的实现
- JSON 是什么?它能带来什么?它和 XML 比较?
- html中如何实现选择存储路径的功能_16687.VSM006分解03_如何打开HTML内嵌图像存储位置...
- 老司机教你分析日志:分析用户的地理位置信息
- runas/cpau/lsrunase使用小结(以管理员运行指定程序)
- python3.6_发送邮件
- 阿里云国际版ECS,虚拟主机和VPS托管之间的区别
- python怎么隐藏输入法_打开和关闭输入法
- 【OpenGL】查看显卡对OpenGL的支持程度
- latex backmatter 是什么意思
- TN905红外测温驱动
- MySQL全版本安装步骤
- 荣耀6x升级Android8省电,HONOR 荣耀 畅玩 6X 手机升级EMUI8.0,怎一个“爽”字了得?...
- 网页音效简易解决方案audiosprite
- 【计算机网络学习笔记09】ARP地址解析协议
- 如何隐藏任务栏图标小结(zz)