python简单爬取热门文字段子并自动浏览
来源:互联网 发布:r语言与matlab 大数据 编辑:程序博客网 时间:2024/06/04 17:43
最近刚学python的爬虫,意外找到转自崔庆才老师的爬虫实战教程,觉得不错。
这里是我的学习笔记,更好的教程在:http://python.jobbole.com/81351/
(不知道为什么,在学校登不进崔老师的博客,所以放一份伯乐在线网的转载)
实战目标
1.用requests模板抓取糗百热门的段子
2. 过滤所有带图片的段子
3 设定想浏览的页数、设定每隔多少时间刷新下个段子
IDE:Interactive Editor for Python
python 2.7.5
准备工作:安装requests模块,教程和下载http://cn.python-requests.org/en/latest/
这个模块好用的一笔,把系统的urllib 和 urllib2封装得很好。强烈建议使用
这里用一个也是在崔庆才老师博客摘下的Tool类,可以方便地清除抓到页面的大部分标签如”<\bn>“等(为了避免编辑器错误,故意把斜杠反过来了)
class Tool: removeImg = re.compile('<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)1 x = re.sub(self.replaceBR,"\n",x) x = re.sub(self.removeExtraTag,"",x) #strip()将前后多余内容删除 return x.strip()
首先,用requests.get获取页面
page=1 url='http://www.qiushibaike.com/hot/page/'+str(page) r=requests.get(url)
快要完成目标1了,此时的 r.text即为内容,但我们要进一步处理。首先就是找出”文字内容
这里可以用美丽汤,我用的是正则表达
首先你要先看糗百的源代码:
稍后补图
可以看到,内容的前面是标签 \n\n<div class="content">\n\n
后面有这个糗百编号标签,然后是</div>
,然后是若干空行再加紧跟标签 <div class="stats">
经过浏览知道,只有文字版的有stats这个标签,图片版的紧跟的是thumb和图片链接,然后才是stats
所以我们可以用正则筛选了:
match=re.findall(r'\n\n<div class="content">\n\n(.*)\n.*\n\n.*\n\n\n\n<div class="stats">',r.text.encode('utf-8'))#我们可以这样输出 for item in match: print item.decode('utf-8') print '-----------------------------------'
看了一下输出,发现有参杂进来的标签~
所以我们要用tool类清除多余标签
print print tool.replace((item.decode('utf-8')))
我们这里再加入计时功能:
for item in match: print tool.replace((item.decode('utf-8'))) print '-----------------------------------' time.sleep(rate)``
这里rate是用户输入的数字
这样每隔rate秒就刷新一个新段子啦
综合起来,整个代码如下:
#coding=utf-8import requestsimport re,time#Tool对象用于删除CSS标签的类,来自崔庆才的Python教程class Tool: #去除img标签,7位长空格 removeImg = re.compile('<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)1 x = re.sub(self.replaceBR,"\n",x) x = re.sub(self.removeExtraTag,"",x) #strip()将前后多余内容删除 return x.strip()tool=Tool()page=1target=input(u'客官今天想看多少页糗百?\n')rate=input(u'您希望隔几秒自动翻下一条糗百段子?\n')while page<=target: url='http://www.qiushibaike.com/hot/page/'+str(page) r=requests.get(url) match=re.findall(r'\n\n<div class="content">\n\n(.*)\n.*\n\n.*\n\n\n\n<div class="stats">',r.text.encode('utf-8')) for item in match: print tool.replace((item.decode('utf-8'))) print '-----------------------------------' time.sleep(rate) page+=1print u'客官今天看的页面全部结束\n'
运行一下 效果如图
- python简单爬取热门文字段子并自动浏览
- Python 爬虫 简单实例 爬取糗事百科段子
- python爬虫爬取段子
- pythpn学习の爬虫爬取糗事百科热门段子
- python 爬虫 爬取糗事百科段子
- Python爬虫 爬取糗事百科段子
- Python爬虫爬取糗事百科段子
- python爬取糗事百科段子
- Python爬虫 爬取糗事百科段子
- 爬取网站段子
- neihan8段子爬取
- 一个爬取糗事百科段子的简单爬虫
- Python爬虫实战一之爬取糗事百科段子
- Python爬虫实战一之爬取糗事百科段子
- Python爬虫实战(1):爬取糗事百科段子
- Python爬虫实战(1):爬取糗事百科段子
- Python爬虫实战一之爬取糗事百科段子
- Python爬虫实战一之爬取糗事百科段子
- strlen函数的实现
- 014.定义数组
- 【特种兵Word教程】如何在Word2013中打开PDF文件并编辑?
- css中padding 和 margin的格式
- 如何重写Android 5.0 新增API
- python简单爬取热门文字段子并自动浏览
- Nginx 反向代理Apache
- ZOJ.2952 Find All M^N Please【数学】 2015/10/20
- android自定义状态栏颜色
- 《shell从入门到精通》笔记
- jquery动态网格瀑布流插件Wookmark
- BaseAdapter......
- win+Apache+mod_wsgi部署python程序-apache2.2+python2.7
- json知识点总结(解析与序列化)