作者:采集之家-rq204
业务QQ:285576545
文章来源:
http://www.caijibbs.com/?action=show&id=20这是我在学习过程中整理的.先讲一下正则,这是大挪移中写规则要用的..这个懂了,规则也就简单了..下边是具体采集时常用的几个正则..
(<span class="bold">)? 表示()内的内容可能出现 也可能不出现
[^<]* 表示不为<的任意字符循环任意多次,碰到第一个<就停止匹配
[^"]*? 表示 不为引号"的字符循环任意多次,碰到第一个"就停止匹配
在正则里面
以下字符: . [ ] ( ) ? * ^ { } $ |
都是有特殊含义的,他们都有是自己的正则匹配的特殊含义
<a href="">******<span class="bold">******</span></a>
刚才里面 ****** 表示变量
如果这些里面包含了这些字符 比如 . [ ] ( ) ? * ^ { } $ |
都必须加每个前面加一个反斜杠\
. [ ] ( ) ? * ^ { } $ |
几个字符在正则中表示:
. 除换行外的所有字符 ,因为我们把换行替换掉了,所以我们想匹配任意字符,就用它
[ ] 两个中表示在这些字符中选
( )表示这里面的字符串,一般用来包含一个字符串 或作为一个matches
匹配出来的内容
像刚才的 (?<url>) ? 表示 前面的字符或字符串 0次或1次
表示 前面的字符或字符串 1次或1次以上
^ 表示反 如刚才的 [^"] 就是不是"的所有字符
{ } 一般结合 循环次数来使用
如 [abc]{1,8} 这表示由a,b,c这样的三个字符任意组成一个最长8最短1的字符串
^还表示开头 $ 表示结尾
如一段话^s.*t$ 表示从s开头t结尾,中间可以是任意字符的字符串
| 表示或者的关系
下边讲版块列表的获取..
版块列表 (这是非常简单的),需要的参数url,title
参数格式:
(?<url>[^"]*?) 版块的url地址
(?<title>[^<]*) 版块的名称
例:<a href="forum-10-1.html"><span class="bold">□-Discuz!程序发布</span></a> 的正则如下:
<a href="(?<url>[^"]*?)">(<span class="bold">)?(?<title>[^<]*)(</span>)?</a>
现在一下分析 (?<url>[^"]*?) 和 (?<title>[^<]*)
(?<url>)里面的 [^"]*? 是获取url的正则 [^<]* 是获取名称的正则
[^"]*? 表示 不为引号"的字符循环任意多次,碰到第一个"就停止匹配
[^<]* 表示不为<的任意字符循环任意多次,碰到第一个<就停止匹配
版块列表样式,这用的是程序自带的参数fid,CurrentPage
discuz论坛基本都是这样 forumdisplay.php?fid=[fid]&page=[CurrentPage]
[fid]表示当前的版块id号,[CurrentPage] 表示当前正在采集的页面,都是变量,这在转移器里是系统变量,必须用[fid] [CurrentPage]
当然,你也可以采静态页面....也用上边的两个参数..
未完..
Tags:
正则