以下是要爬虫的html内容:

<div class="article block untagged mb15" id='qiushi_tag_113452216'>

<div class="author">
<a href="/users/30450374" target="_blank">
<img src="http://pic.qiushibaike.com/system/avtnew/3045/30450374/medium/20151014094231.jpg" />
本宫不服
</a>
</div>
<div class="content">
这是镇上一条偏僻路上的一家小饭馆,老板是一对老夫妻,开店几十年了,每次中午路过都要在这吃,满满的实惠。虽然饭店看着挺破败,但菜什么都很干净,因为挺偏的路上,人流较少,菜备的不多,有的菜都现洗。最重要的是价格,特实惠,在镇上其它饭店吃饭,鸡,鱼,价格18元,素菜8元。还不多,土豆炖肉28,只见土豆不见肉。而这家,红烧肉15一盘。全是肉,炒鸡块10元,红烧扁鱼12,素肉5元。这一大碗有肉圆,蘑菇,肉皮等的汤才7元
<!--1445510496-->
</div> <div class="thumb">
<a href="/article/113452216" target="_blank">
<img src="http://pic.qiushibaike.com/system/pictures/11345/113452216/medium/app113452216.jpg" alt="这是镇上一条偏僻路上的一家小饭馆" />
</a>
</div> <div class="stats">
<span class="stats-vote"><i class="number">491</i> 好笑</span>
<span class="stats-comments">
<span class="dash"> · </span>
<a href="/article/113452216" data-share="/article/113452216" id="c-113452216" class="qiushi_comments" target="_blank">
<i class="number">97</i> 评论
</a>
</span>
</div> <div id="qiushi_counts_113452216" class="stats-buttons bar clearfix">
<ul class="clearfix">
<li id="vote-up-113452216" class="up">
<a href="javascript:voting(113452216,1)" class="voting" data-article="113452216" id="up-113452216" rel="nofollow">
<i class="iconfont" data-icon-actived="󰁡" data-icon-original="󰀟">󰀟</i>
<span class="number hidden">498</span>
</a>
</li>
<li id="vote-dn-113452216" class="down">
<a href="javascript:voting(113452216,-1)" class="voting" data-article="113452216" id="dn-113452216" rel="nofollow">
<i class="iconfont" data-icon-actived="󰀠" data-icon-original="󰀠">󰀠</i>
<span class="number hidden">-7</span>
</a>
</li>
<li class="comments">
<a href="/article/113452216" id="c-113452216" class="qiushi_comments" target="_blank" rel="nofollow">
<i class="iconfont" data-icon-actived="󰁢" data-icon-original="󰀝">󰀝</i>
</a>
</li>
</ul>
</div> <div class="single-share">
<!-- JiaThis Button BEGIN -->
<div class="jiathis_style">
<span class="jiathis_txt">分享到:</span>
<a href="###" class="jiathis_button_weixin" rel="external nofollow"></a>
<a href="###" class="jiathis_button_cqq" rel="external nofollow"></a>
<a href="###"class="jiathis_button_qzone" rel="external nofollow"></a>
<a href="###" class="jiathis_button_tsina" rel="external nofollow"></a>
<a href="###" class="jiathis_button_tieba" rel="external nofollow"></a>
<a href="http://www.jiathis.com/share" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank" rel="external nofollow"></a>
</div>
<!-- JiaThis Button END -->
</div>
<div class="single-clear">
</div> </div>

  我们可以看到,每一个段子都是<div class=”article block untagged mb15″ id=”…”>…</div>包裹的内容。

  现在我们想获取发布人,发布日期,段子内容,以及点赞的个数。不过另外注意的是,段子有些是带图片的,如果我们想在控制台显示图片是不现实的,所以我们直接把带有图片的段子给它剔除掉,只保存仅含文本的段子。

  所以写出的正则表达式如下:

content = response.read().decode('utf-8')
pattern = re.compile('<div.*?author">.*?<a.*?<img.*?>(.*?)</a>.*?<div.*?'+
'content">(.*?)<!--(.*?)-->.*?</div>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S)
items = re.findall(pattern,content)
for item in items:
  #item[0]是一个段子的发布者,item[1]是内容,item[2]是发布时间,item[3]是图片,item[4]是点赞数
print item[0],item[1],item[2],item[3],item[4]

  现在正则表达式在这里稍作说明

  1).*? 是一个固定的搭配,.和*代表可以匹配任意无限多个字符,加上?表示使用非贪婪模式进行匹配,也就是我们会尽可能短地做匹配,以后我们还会大量用到 .*? 的搭配。

  2)(.*?)代表一个分组,在这个正则表达式中我们匹配了五个分组,在后面的遍历item中,item[0]就代表第一个(.*?)所指代的内容,item[1]就代表第二个(.*?)所指代的内容,以此类推。

  3)re.S 标志代表在匹配时为点任意匹配模式,点 . 也可以代表换行符。

  这样我们就获取了发布人,发布时间,发布内容,附加图片以及点赞数。

  在这里注意一下,我们要获取的内容如果是带有图片,直接输出出来比较繁琐,所以这里我们只获取不带图片的段子就好了。所以,在这里我们就需要对带图片的段子进行过滤。我们可以发现,带有图片的段子会带有类似下面的代码,而不带图片的则没有,所以,我们的正则表达式的item[3]就是获取了下面的内容,如果不带图片,item[3]获取的内容便是空。

<a href="/article/112061287?list=hot&amp;s=4794990" target="_blank">
<img src="http://pic.qiushibaike.com/system/pictures/11206/112061287/medium/app112061287.jpg" alt="但他们依然乐观">
</a>

  所以我们只需要判断item[3]中是否含有img标签就可以了。我们再把上述代码中的for循环改为下面的样子:

for item in items:
haveImg = re.search("img",item[3])
if not haveImg:
print item[0],item[1],item[2],item[4]

【Python爬虫实战--3】html写正则表达式的更多相关文章

  1. 【图文详解】python爬虫实战——5分钟做个图片自动下载器

    python爬虫实战——图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,(没看的先去看!!)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap sho ...

  2. Python爬虫实战---抓取图书馆借阅信息

    Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...

  3. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  4. Python爬虫实战五之模拟登录淘宝并获取所有订单

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 温馨提示 更新时间,2016-02-01,现在淘宝换成了滑块验证了 ...

  5. Python爬虫实战三之实现山东大学无线网络掉线自动重连

    综述 最近山大软件园校区QLSC_STU无线网掉线掉的厉害,连上之后平均十分钟左右掉线一次,很是让人心烦,还能不能愉快地上自习了?能忍吗?反正我是不能忍了,嗯,自己动手,丰衣足食!写个程序解决掉它! ...

  6. Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...

  7. python爬虫实战——5分钟做个图片自动下载器

      python爬虫实战——图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要, ...

  8. 转 Python爬虫实战二之爬取百度贴吧帖子

    静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...

  9. Python爬虫实战之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...

  10. 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战

    <精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...

随机推荐

  1. Android使用Eclipse遇到"java.lang.ClassNotFoundException"

    最近遇到个Android Jar的问题,找了几天才找到root cause. 在此记录下. 我们的Android项目需要使用一个供应商的Jar. 我们使用的开发环境为:Eclipse + ADT插件( ...

  2. 1. LAMP----PHP开发环境搭建(Win)

    LAMP=Linux+Apache+MySQL+PHP. Step1 安装Apache http://httpd.apache.org/download.cgi 1.打开上面网址->点击File ...

  3. 关于在mfc中cstring转为float和ini

    CString str1,str, str2; GetDlgItemText(IDC_EDIT1, str1); GetDlgItemText(IDC_EDIT2, str2); UINT value ...

  4. jsp日期插件My97DatePicker 强大的日期控件 使用方便简单

    本文属转载(希望对编程爱好者有所帮助)详情请访问官方网站 http://www.my97.net/dp/index.asp 一. 简介 1. 简介 目前的版本是:4.7 2. 注意事项 My97Dat ...

  5. Dylans loves numbers

    Problem Description Who is Dylans?You can find his ID in UOJ and Codeforces. His another ID is s1451 ...

  6. SQL in优化将In转化为联合查询

    in查询有时候会非常影响性能,最好能转化为联合查询,但有的网友说sqlserver会自动将in转化为联合查询,但我实际遇到的有时候却不是这样.所以最好还是不要用in. 我自己的例子,用in的时候耗费了 ...

  7. gvim窗口根据gnome-terminal位置定位

    gvim启动位置固定的话容易挡到东西,所以写了一段vimscript根据gnome-terminal的位置启动gvim,这样被遮住的概率就一些了. fun! g:get_xterm_pos ()&qu ...

  8. Qt实现悬浮窗效果

    当鼠标移动到头像控件时,显示悬浮窗,当鼠标离开时,悬浮窗隐藏.   1.控件选择 悬浮窗可以从QDialog派生,并将窗口的属性设置为无边框 this->setWindowFlags(this- ...

  9. Nis+Nfs+Autofs

    Nis: NIS服务的应用结构中分为NIS服务器和NIS客户机两种角色 NIS服务器集中维护用户的帐号信息(数据库)供NIS客户机进行查询 用户登录任何一台NIS客户机都会从NIS服务器进行登录认证, ...

  10. redis 2

    http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage 在Ubuntu下安装reids redis-2. ...