以下是要爬虫的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. PHP的ip2long和long2ip函数的实现原理

    最近要做个十进制数字的可逆转换做邀请码,一直没搞清楚怎么弄的,实在太复杂了,今天弄IP时想到这个可以进行转换,于是研究了下原理: 主要是自己整理了下: $ip = '12.34.56.78'; $ip ...

  2. PAT乙级1034. 有理数四则运算(20)

    本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分 ...

  3. laravel5 MAC is invalid

    如果本机的环境更换过,项目中用来加密Crypt组件中的参数会变更. 如果出现这个问题,得更换数据库中加密后的变量 stackoverflow上找到的解决方法都是 composer dump-autol ...

  4. C#泛型委托及约束

    泛型委托: namespace 泛型委托 { public delegate void Mydelegate<T>(T msg); class Program { static void ...

  5. [帖子收集]环境光遮蔽(Ambient Occlusion)

    环境光遮蔽,效果示例图 图片左边是一条龙的简单模型,呈现在一个均匀照明的环境中.尽管模型中有一些明暗不同的区域,但大部分光照都是均匀的.虽然模型有着相当复杂的几何形状,但看上去比较光滑平坦,没有明显的 ...

  6. 织梦dedecms文章发布日期时间调用标签大全

    dedecms首页时间标签: 1.12-27 样式 [field:pubdate function='strftime("%m-%d",@me)'/] 2.May 15, 2012 ...

  7. Little Puzzlers–List All Anagrams in a Word

    The Solution A major hint is in the fact we are given a dictionary.  Because we are given this dicti ...

  8. tabBar 选中默认蓝色 ,取消选中(自定义)

    - (void)viewDidLoad { [super viewDidLoad]; //    [self _initSubViewControllers]; //    [self _custom ...

  9. sql-yog

    sqlyog及类似工具的使用 #建表 #索引 #联合索引 #前缀索引 #表注释 #sql语句

  10. Cookie小解2

    Cookie最早用来标识和认证一个用户,其处理分为以下几步: 1.服务端向客户端发送Cookie 2.浏览器将Cookie保存 3.之后每次浏览器服务服务器时都会将Cookie发向服务器端 ----- ...