Python抓取段子的爬虫
1.需求
按下回车键,显示一个段子,要求显示段子的作者、点赞数、评论数、顶等信息。
2.段子网站
地址:http://www.qiushibaike.com/hot/page/1,更换后面的数字可以获取不同页的段子,每页有10多条段子吧,因此爬虫从读取该网页并解析就好了。
3.实现方式
这里使用的Python库都是系统自带的,所以不需要安装额外的第三方库,使用的库主要是urllib2--用于获取网页内容,re-正则表达式解析获取网页信息。
其中urllib2需要注意设置header和以request的方式请求网页,而最主要的则是re正则表达式的写法了,这个见仁见智,我正则表达式不是很熟,也就能写个能用的,所以……质量不能保证哈。
获取的每个段子的内容基本都是这样子的:
<div class="article block untagged mb15" id='qiushi_tag_106723566'><div class="author"> <a href="/users/14932928"> <img src="http://pic.qiushibaike.com/system/avtnew/1493/14932928/medium/20141225021149.jpg" alt="王小婕" /> </a> <a href="/users/14932928">王小婕 </a> </div><div class="content">家里的哈士奇,训练捡东西一直没学会,直到有一天,兜里钱掉了,他丫叼着不撒口,从此学会捡钱了,有一天他和一个硬币较上劲了,叼不起来,丫的硬是用舌头舔回家…… <!--2015-05-22 23:56:08--></div><div class="stats"> <span class="stats-vote"><i class="number">16479</i> 好笑</span> <span class="stats-comments"><span class="dash"> · </span> <a href="/article/106723566?list=hot&s=4774673" id="c-106723566" class="qiushi_comments" title="120条评论" target="_blank" οnclick="_hmt.push(['_trackEvent', 'post', 'click', 'signlePost'])"> <i class="number">120</i> 回复 </a></span> </div> <div id="qiushi_counts_106723566" class="stats-buttons bar clearfix"> <ul class="clearfix"> <li id="vote-up-106723566" class="up"> <a href="javascript:voting(106723566,1)" class="voting" data-article="106723566" id="up-106723566" title="16904个顶"> <i class="iconfont" data-icon-actived="
主要解析该内容就可以获取到一个段子了,这里这样处理的:#author 作者 strRe = '<div.*?class="author".*?<a.*?<a.*?>(.*?)</a>' #content and datetime 内容和时间 strRe += '.*?<div.*?class="content".*?>(.*?)<!--(.*?)--.*?</div>' #vote and comments 投票数和评论数 strRe += '.*?<span.*?class="stats-vote".*?>.*?class="number".*?>(.*?)</i>.*?</span>.*?<*.?class="qiushi_comments".*?>.*?<i.*?>(.*?)</i>.*?</a>' #up 顶数 strRe += '.*?<li.*?class="up".*?>.*?<span.*?class="number hidden".*?>(.*?)</span>' #down 踩数 strRe += '.*?<li.*?class="down".*?>.*?<span.*?class="number hidden".*?>(.*?)</span>'
4.代码实现
#-*- coding: utf-8 -*-import urllib2
import repage_num = 1
page_url = 'http://www.qiushibaike.com/hot/page/'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent':user_agent}def GetAllJokes(cont):#pattern = re.compile('<div.*?class="author.*?>.*?<a.*?</a>.*?<a.*?>(.*?)</a>.*?<div.*?class="content".*?title="(.*?)">(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S)strRe = '<div.*?class="author".*?<a.*?<a.*?>(.*?)</a>'strRe += '.*?<div.*?class="content".*?>(.*?)<!--(.*?)--.*?</div>'strRe += '.*?<span.*?class="stats-vote".*?>.*?class="number".*?>(.*?)</i>.*?</span>.*?<*.?class="qiushi_comments".*?>.*?<i.*?>(.*?)</i>.*?</a>'strRe += '.*?<li.*?class="up".*?>.*?<span.*?class="number hidden".*?>(.*?)</span>'strRe += '.*?<li.*?class="down".*?>.*?<span.*?class="number hidden".*?>(.*?)</span>'pattern = re.compile(strRe, re.S)items = re.findall(pattern,content)jokes = []for item in items:joke={}joke[u"作者"]="".join(item[0].split())joke[u"正文"]="".join(item[1].split())joke[u"时间"]=item[2]joke[u"投票"]=item[3]joke[u"评论数"]=item[4]joke[u"顶"]=item[5]joke[u"踩"]=item[6]jokes.append(joke)return jokes
if __name__ == '__main__':jokes = []num = 1while True:if len(jokes)<=0:print "update newly from internet..."try:req = urllib2.Request(page_url+str(num),headers=headers)resp = urllib2.urlopen(req)content = resp.read().decode('utf8')content = content[content.find('<div class="article block untagged mb15"')::]jokes=GetAllJokes(content)num += 1except urllib2.URLError,e:if hasattr(e, "code"):print e.codeif hasattr(e, "reason"):print e.reasonexit(-1)joke = jokes[0]del jokes[0]for i in joke:print '%8s\t:\t%s'%(i,joke[i])print '======================================================'raw_input("presss enter key to continue...")
5.输出示例
C:\Python27\python.exe F:/SrcCode/Python/GetNewlyJokes/GetNewlyJokes.py
update newly from internet...踩 : -475正文 : 家里的哈士奇,训练捡东西一直没学会,直到有一天,兜里钱掉了,他丫叼着不撒口,从此学会捡钱了,有一天他和一个硬币较上劲了,叼不起来,丫的硬是用舌头舔回家……评论数 : 130作者 : 王小婕时间 : 2015-05-22 23:56:08投票 : 17899顶 : 18374
======================================================
presss enter key to continue...踩 : -248正文 : 今天学校歌舞大赛,有一群妹纸跳热舞,下面有一个男的开始喊XXX我爱你,可能是情侣关系,,当时脑抽喊了一句我也是,感觉旁边的人眼神都不对了,多亏当时跑得快呀评论数 : 33作者 : 小伙还可以啊时间 : 2015-05-23 00:07:20投票 : 8343顶 : 8591
======================================================
presss enter key to continue...
6.参考
静觅 » Python爬虫实战一之爬取糗事百科段子
Python抓取段子的爬虫相关推荐
- python段子_Python抓取段子的爬虫
问题导读 1.Python抓取段子的爬虫的需求是什么? 2.Python抓取段子的爬虫是如何实现的? 3.你认为该如何实现? 1.需求按下回车键,显示一个段子,要求显示段子的作者.点赞数.评论数.顶等 ...
- Python爬虫之小试牛刀——使用Python抓取百度街景图像
之前用.Net做过一些自动化爬虫程序,听大牛们说使用python来写爬虫更便捷,按捺不住抽空试了一把,使用Python抓取百度街景影像. 这两天,武汉迎来了一个德国总理默克尔这位大人物,又刷了一把武汉 ...
- python frame框架抓取_Python抓取框架Scrapy爬虫入门:页面提取
前言 Scrapy是一个非常好的抓取框架,它不仅提供了一些开箱可用的基础组建,还能够根据自己的需求,进行强大的自定义.本文主要给大家介绍了关于Python抓取框架Scrapy之页面提取的相关内容,分享 ...
- python抓取内存中的网页_『爬虫四步走』手把手教你使用Python抓取并存储网页数据!...
爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程.如果你还在入门爬虫 ...
- python抓取贴吧_零基础写python爬虫之抓取百度贴吧代码分享
这里就不给大家废话了,直接上代码,代码的解释都在注释里面,看不懂的也别来问我,好好学学基础知识去! # -*- coding: utf-8 -*- #------------------------- ...
- python爬虫保存图片到指定文件夹_李亚涛:python抓取某房源户型图并自动保存到文件夹...
大家好,今天来给大家分享一下如何抓取某房产网站房源户型图的所有图片,而且自动以房源名称命名一个文件夹,把所有图片放到文件夹中. 大概的思路是: 1.获取网页源代码 2.获取图片地址与房源名称 3.在当 ...
- python多线程爬取段子_python爬虫(爬取段子)
python爬取段子 爬取某个网页的段子 第一步 不管三七二十一我们先导入模块 #http://baijiahao.baidu.com/s?id=1598724756013298998&wfr ...
- 微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”...
微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友 ...
- python抓取gb2312/gbk编码网页乱码问题
做了个网络爬虫抓取网页,但如果网页是gbk/gb2312编码,则会出现乱码问题,如下: 取得文字后,直接打印,输出结果str如下:¹óÖÝÈËÊ¿¼ÊÔÐÅÏ¢Íø_¹óÖÝÈËÊ¿¼ÊÔÍø_¹ ...
最新文章
- python RE库的基本使用!基本定义详细讲解!来源于MOOCpython,课程链接文章末尾有!
- ubuntu终端快捷键
- java中类作为成员变量类型使用、接口作为成员变量类型使用、接口作为方法的参数或返回值使用
- godaddy ssl_免费在线Linux培训,GoDaddy切换到OpenStack等
- ctypealpha php_php中Ctype函数用法详解
- VMware 设置网络
- H3CSE题库有关问题
- 好用的自媒体爆文素材采集技巧,提高爆文创作几率
- TFIDF理解和应用
- [哈佛幸福课13 听后感]
- 谁能辨我是雄雌?轩墨宝宝个人资料,轩墨宝宝CP照!
- 计算机游戏 ppt背景图片,课件背景图片大全
- matlab单字音频合成,基于MATLAB的音频解析与合成
- PHP混淆zym解密
- 家谱处理(30 分)(字符串的处理substr)
- C# 修改本地以太网ip地址
- Oracle Flashback之Flashback table和flashback drop
- 怎么样让别人访问我的计算机,局域网内怎么让别人访问我的电脑
- lnmp架构的工作原理
- (项目)在线教育平台(九)
热门文章
- 使用Windows7的索引与搜索功能
- Android Studio的android 模拟器启动黑屏 解决
- java中的Assert断言式表达中的assertEquals用法
- ecognition 国外论坛地址,软件资料下载地址
- Vuex状态管理模式-M
- nextline函数_nextLine()和next()的区别和使用方法
- Python爬虫股票评论,snowNLP简单分析股民用户情绪(草稿)
- Sharding-JDBC 原理以及相关入门
- 遇见未知的自己 张德芬
- [转网页]番茄花园版Windows XP作者被拘留!