首页 > 代码库 > 用正则表示式分析网页

用正则表示式分析网页

昨晚现学现卖了一下正则表达式,记录一下

爬的网页:http://www.qiushibaike.com/hot/page/1/?s=4930745

首先来看源码

<a href="http://www.mamicode.com/users/13145907/" target="_blank" rel="nofollow">
<img src="http://pic.qiushibaike.com/system/avtnew/1314/13145907/medium/20140731141650.jpg" alt="一个小时的好汉"/>
</a>
<a href="http://www.mamicode.com/users/13145907/" target="_blank" title="一个小时的好汉">
<h2>一个小时的好汉</h2>
</a>
<div class="articleGender manIcon">28</div>
</div>
<a href="http://www.mamicode.com/article/117979974" target="_blank" class=‘contentHerf‘ >
<div class="content">
<span>今天给儿子去买小笼包,旁边有个拾荒的老大爷手里就拿着一块钱问,包子怎么卖,老板说五块一笼,抬头看老大爷愣了一下,老大爷转身缓缓的走了,就听见老板在后面喊,老大爷,小笼包五块一笼,这里的包子一块钱三个,老板从别的大笼里面,夹出三个热腾腾的大肉包,当时有点莫名的感动!老板你是个好人</span>
</div>
</a>
<div class="stats">
<span class="stats-vote"><i class="number">13550</i> 好笑</span>
<span class="stats-comments">
<span class="dash"> · </span>
<a href="http://www.mamicode.com/article/117979974" data-share="/article/117979974" id="c-117979974" class="qiushi_comments" target="_blank">
<i class="number">457</i> 评论

  获取的源码里还有很多空格,这里为了显示方便手动删去了,其中加粗的部分,就是要获得的作者、内容、点赞数、评论数,这里首先强调一下一个很有用的表达式:

.*?

.*可以匹配任意多个字符,?指非贪婪模式,即会在满足条件的情况下尽可能短,经过多次实验,要匹配这种整段的还是不能偷懒,多用一些有特征的语句,比如

<div class="stats">,这种具有特殊性,多用几个就可以限定整段,需要注意的是换行符也需要匹配一下,现在详细说明一下

1. <a href="http://www.mamicode.com/users.*?title=" 匹配

<a href="http://www.mamicode.com/users/13145907/" target="_blank" rel="nofollow">
<img src="http://pic.qiushibaike.com/system/avtnew/1314/13145907/medium/20140731141650.jpg" alt="一个小时的好汉"/>
</a>
<a href="http://www.mamicode.com/users/13145907/" target="_blank" title="

  开始用的是<a.*?title=",发现<a开头的太多了,匹配了过多的内容,记得勾选正则表示式和.匹配新行,效果如下:

技术分享

 2.<a href="http://www.mamicode.com/users.*?title=".*?">.*?<div class="content">

技术分享

 3. <a href="http://www.mamicode.com/users.*?title=".*?">.*?<div class="content">.*?<span>.*?</span>.*?"number">.*?</i>.*?number">.*?</i> 匹配全部

 

用正则表示式分析网页