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抓取段子的爬虫相关推荐

  1. python段子_Python抓取段子的爬虫

    问题导读 1.Python抓取段子的爬虫的需求是什么? 2.Python抓取段子的爬虫是如何实现的? 3.你认为该如何实现? 1.需求按下回车键,显示一个段子,要求显示段子的作者.点赞数.评论数.顶等 ...

  2. Python爬虫之小试牛刀——使用Python抓取百度街景图像

    之前用.Net做过一些自动化爬虫程序,听大牛们说使用python来写爬虫更便捷,按捺不住抽空试了一把,使用Python抓取百度街景影像. 这两天,武汉迎来了一个德国总理默克尔这位大人物,又刷了一把武汉 ...

  3. python frame框架抓取_Python抓取框架Scrapy爬虫入门:页面提取

    前言 Scrapy是一个非常好的抓取框架,它不仅提供了一些开箱可用的基础组建,还能够根据自己的需求,进行强大的自定义.本文主要给大家介绍了关于Python抓取框架Scrapy之页面提取的相关内容,分享 ...

  4. python抓取内存中的网页_『爬虫四步走』手把手教你使用Python抓取并存储网页数据!...

    爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程.如果你还在入门爬虫 ...

  5. python抓取贴吧_零基础写python爬虫之抓取百度贴吧代码分享

    这里就不给大家废话了,直接上代码,代码的解释都在注释里面,看不懂的也别来问我,好好学学基础知识去! # -*- coding: utf-8 -*- #------------------------- ...

  6. python爬虫保存图片到指定文件夹_李亚涛:python抓取某房源户型图并自动保存到文件夹...

    大家好,今天来给大家分享一下如何抓取某房产网站房源户型图的所有图片,而且自动以房源名称命名一个文件夹,把所有图片放到文件夹中. 大概的思路是: 1.获取网页源代码 2.获取图片地址与房源名称 3.在当 ...

  7. python多线程爬取段子_python爬虫(爬取段子)

    python爬取段子 爬取某个网页的段子 第一步 不管三七二十一我们先导入模块 #http://baijiahao.baidu.com/s?id=1598724756013298998&wfr ...

  8. 微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”...

    微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友 ...

  9. python抓取gb2312/gbk编码网页乱码问题

    做了个网络爬虫抓取网页,但如果网页是gbk/gb2312编码,则会出现乱码问题,如下: 取得文字后,直接打印,输出结果str如下:¹óÖÝÈËÊ¿¼ÊÔÐÅÏ¢Íø_¹óÖÝÈËÊ¿¼ÊÔÍø_¹ ...

最新文章

  1. python RE库的基本使用!基本定义详细讲解!来源于MOOCpython,课程链接文章末尾有!
  2. ubuntu终端快捷键
  3. java中类作为成员变量类型使用、接口作为成员变量类型使用、接口作为方法的参数或返回值使用
  4. godaddy ssl_免费在线Linux培训,GoDaddy切换到OpenStack等
  5. ctypealpha php_php中Ctype函数用法详解
  6. VMware 设置网络
  7. H3CSE题库有关问题
  8. 好用的自媒体爆文素材采集技巧,提高爆文创作几率
  9. TFIDF理解和应用
  10. [哈佛幸福课13 听后感]
  11. 谁能辨我是雄雌?轩墨宝宝个人资料,轩墨宝宝CP照!
  12. 计算机游戏 ppt背景图片,课件背景图片大全
  13. matlab单字音频合成,基于MATLAB的音频解析与合成
  14. PHP混淆zym解密
  15. 家谱处理(30 分)(字符串的处理substr)
  16. C# 修改本地以太网ip地址
  17. Oracle Flashback之Flashback table和flashback drop
  18. 怎么样让别人访问我的计算机,局域网内怎么让别人访问我的电脑
  19. lnmp架构的工作原理
  20. (项目)在线教育平台(九)

热门文章

  1. 使用Windows7的索引与搜索功能
  2. Android Studio的android 模拟器启动黑屏 解决
  3. java中的Assert断言式表达中的assertEquals用法
  4. ecognition 国外论坛地址,软件资料下载地址
  5. Vuex状态管理模式-M
  6. nextline函数_nextLine()和next()的区别和使用方法
  7. Python爬虫股票评论,snowNLP简单分析股民用户情绪(草稿)
  8. Sharding-JDBC 原理以及相关入门
  9. 遇见未知的自己 张德芬
  10. [转网页]番茄花园版Windows XP作者被拘留!