站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
CMSware采集/正则及函数学习
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
<span style="border:1px solid #000; float:right; text-align:center; padding:6px;"><strong>导航:</strong>[[CMSware采集管理|返回上一页]]</span> <div style="clear:both;"></div> ==第一课:基础== [[采集]]索引页面[[URL]]: 待采集的内容[[链接]]列表页,一般是[[网站]]的2级或3级栏目列表页.(我们在此以下面的为例) 采集索引页URL: <pre> http://www.enet.com.cn/elady/fashion/inforcenter/articlelist.jsp?_current_group=1&_current_page=2&acid=4542 </pre> *采集索引页有效区域定位规则: 用来定位有效的内容链接位置,如下图.(就是我们要采的列表的区块,如下面,可能除了本身的列表外,还有其他栏目的调用列表,所以我们只取中间的,其他的都不要。当然有些栏目本身就一个列表,那这时留空,不用正则) <div> [[Image:cmsware126.jpg]] </div> 然后我们右键-查看源文件(这儿要注意下,最好在线用[[IE]]右键直接查看,不要另存下来,再用DW或[[editplus]] 打开,会有变化),找到一个开始符,一个结束符。 开始符、 结束符必须:从整个源文件最开始,从上到下第一个,不一定非得是惟一的。 如下图: <div> [[Image:cmsware127.gif]] </div> 由上图,我们得到了开始、结束符。 采集索引页有效区域定位规则: <pre> <table width="90%" border="0" cellspacing="0" cellpadding="0" align="center">{DATA}<table width="100%" border="0" cellspacing="0" cellpadding="10" align="center"> </pre> ==第二课:正则== 要采集,就要用到正则,什么是正则? 按我最通俗的解释就是:用固定的语句,来对应不固定的内容 [[CMSware]] 用的正则的地方有: *有效内容页URL过虑规则 *内容页分页采集自动检测规则 就以上两处,其他的地方都不需要正则。 正则语法: 所有采集正则必须以/开始, /isU结束.格式.即: */头标识{DATA}尾标识/isU *头/尾标识中的所有/符号必须加个\转义符,也就是</html>你要写成<\/html> *头/尾标识中的所有"符号必须加个\转义符,也就是<font color="#000000">你要写成<font color=\"#000000\"> *[\s]*代表0个或多个空格, *[^\"><\s]*代表除了",<,>,空格外的所有字符 *[0-9]+代表任意的数字组合: '''实例''': 有效内容页URL过虑规则: <pre> <a href="/life/xiuxian/cultrue/200609/20060913146162_1.shtml" class="blackbiglist" target="_blank">不可思议的天然的风景</a> </pre> 我们按上面的正则语法,来写下,那就是: <pre> /<a[\s]*href=\"([^\"><\s]*[0-9]+_[0-9]+.shtml)/isU </pre> 大家可以对比下。 内容页分页采集自动检测规则: 以 www.enet.com.cn/life/xiuxian/cultrue/200609/20060913146162_1.shtml 内容页为例: IE上右键-查看源文件。得到分页地址: <div> [[Image:cmsware128.gif]] </div> <pre> <a href="/life/xiuxian/cultrue/200609/20060913146162_2.shtml"> 下一页</a> </pre> 我们将他改为正则,这时会发现跟上面的 有效页URL正则差不多。 <pre> /<a[\s]*href=\"([^\"><\s]*[0-9]+_[0-9]+.shtml)\"> 下一页<\/a>/isU </pre> 总结下就是: 有空格的地方用: * [\s]* * " 双引号 * ' 单引号 * / 斜杠 等符号前 各加一个 \ * 用() 号将 引号中间的内容围起来 <pre> /life/xiuxian/cultrue/200609/ 改用正则 [^\"><\s]* </pre> 20060913146162_2 改用正则 [0-9]+_[0-9]+ 注:这是两个语法的,中间用_ 分开了,最后,在开头 加个 / ,结尾加上 /isU 注:注意大小写 注:有些 下一页 是用 [下一页] 带[] 符号的,那就在符号前加 \ ,就是 \[下一页\] ==第三课:取内容页的标题及内容== 通过上面的学习,我已经解决了最麻烦的正则。以前部分,不需要正则了,也是跟上面的 采集索引页有效区域定位规则: 一样: 开始符{DATA}结束符。就OK了 * title 标题: 查看 www.enet.com.cn/life/xiuxian/cultrue/200609/20060913146162_1.shtml 页,右键-查看源文件。 最最上面,我们会看到 <pre> <title>不可思议的天然的风景休闲</title> </pre> 改后就是 <pre> <title>{DATA}</title> </pre> 不用任何正则,也不用 在 / 等前面加 \ ,直接用。很简单吧?有的说了。title 很不规则。那简单,我们取正文中的标题。接着查看源文件,得到 <pre> <font color="515151" class="p24"><b>不可思议的天然的风景</b></font> </pre> 改后就是: <pre> <font color="515151" class="p24"><b>{DATA}</b></font> </pre> 这样就行了。标题有了,下面是作者,来源,[[关键字]]等信息。这些可以不要。也可以要。我们要: * 作者: ( 这个对方是空,就不写源码了 ) <pre> 作者:{DATA}来源: </pre> :来源网站: ( 来源:猫扑网 </font> ) :来源:{DATA}</font> :关键字: ( <meta name="keywords" content="不可思议, 天然,风景,奇观"> ) <pre> <meta name="keywords" content="{DATA}"> </pre> :内容:( 这个太长了,不帖了,大家根据下面的规则,自己看下源码里的显示吧 ) <pre> <td class="p14h">{DATA}<tr><td align=center> </pre> 因为有分页,所以我们要在内容的规则后面加上 ==>[localizeImg]==>[page] ==>[localizeImg] 图片本地化 ==>[page] 采集内容分页 完整的就是: <pre> <td class="p14h">{DATA}<tr><td align=center>==>[localizeImg]==>[page] </pre> 这时大家再点 测试,解析一个个的新闻查看,就会发现:标题、内容等各字段,都已经正确的取出了要采下来的内容,如果没有显示出来,或取多了,把非内容里的也取出来了,那就是你取的 开始、结束符 不准,再找,直到测试的结果满意为止。 ==第四课:采集过滤函数的写法,替换与过滤掉不想要的HTML标签== 在[[采集]]中,我们常会遇见,内容中有广告,或[[HTML]]的各种标签,或某段内容,是我们不想要的,这时我们就要用到 采集过滤函数 了,把这些不想要的过滤掉,或替换成我们想要的某些效果。 后台-函数管理-采集过滤函数,或打开setting/crawler.ini.php ,来添加过滤函数。 我们先打开 crawler.ini.php 文件,看里面的内容。我们看里面系统自带的过滤函数 ==>[clearRubbish] 是怎么样的。 <pre> function crawler_clearRubbish($str) { $clear_pattern = array( '1' => array( 'pattern'=>"/<OBJECT[\S|\s]*<\/OBJECT>/isU" ,'replace'=>"" ), '2' => array( 'pattern'=>"/<IFRAME[\S|\s]*<\/IFRAME>/isU" ,'replace'=>"" ), '3' => array( 'pattern'=>"/<SCRIPT[\S|\s]*<\/SCRIPT>/isU" ,'replace'=>"" ), '4' => array( 'pattern'=>"/<A HREF=[\S|\s]*>([\S|\s]*)<\/A>/isU" ,'replace'=>"\\1" ), '5' => array( 'pattern'=>"/<map[\S|\s]*>([\S|\s]*)<\/map>/isU" ,'replace'=>"" ), '6' => array( 'pattern'=>"/<!--[\S|\s]*-->/isU" ,'replace'=>"" ), ); foreach($clear_pattern as $key=>$var) { $str = preg_replace($var['pattern'],$var['replace'], $str); } return $str; } </pre> 上面是 6 组过滤,是一般广告常用的格式,如:flash/iframe/js 等。我们来说解上面的一组,如第一组: <pre> '1' => array( 'pattern'=>"/<OBJECT[\S|\s]*<\/OBJECT>/isU" ,'replace'=>"" ), </pre> *'pattern'=>"/<OBJECT[\S|\s]*<\/OBJECT>/isU" :这段是指要取片段或范围,也就是我们要过滤掉的内容。 *'replace'=>"" :这是替换的意思,默认是空,也就成了我们俗称的过滤掉了。如果你需要将范围内的内容,替换成你自己的,请在这里添加,普通的HTML语法就行了,但要在 / " [ ] 符号前加 \ '''详解''': * /isU :是正则的开始与结束符。这与采集时URL的正则是一样的用法。 * [\S|\s]* :这个就是重点了,是正则,意思就是:匹配任何符号 * <OBJECT : 这是[[FLASH]]的HTML标签的开始符。这里没有用 > 关闭标签,这是因为FLASH的这个标签里,还有其他的一些参数标签,所以这后面,要紧跟着用 [\S|\s]* 正则来包括这些参数的标签。 * <\/OBJECT> : FLASH的HTML标签的结束符。同采集时的规则一样,要在 / " [ ] 符号前加 \, 下面我们就添加一个自定义的过滤。如: SELECT 标签吧。 我们复制一组过滤 (每组过滤4 行,一般改动的只有第一行开头的 “1” 数字,表示一个过滤,一个个排下来就行了,上面已经有6 个了,那我们下面再添加的,就是 “7” 了 ) <pre> '6' => array( 'pattern'=>"/<!--[\S|\s]*-->/isU" ,'replace'=>"" ), </pre> 就COPY最后这组过滤,是过滤 <!-- 注释内容 --> 的。我们copy ,并紧跟着帖到下面,就是: <pre> '6' => array( 'pattern'=>"/<!--[\S|\s]*-->/isU" ,'replace'=>"" ), '6' => array( 'pattern'=>"/<!--[\S|\s]*-->/isU" ,'replace'=>"" ), </pre> 上面红字部分,就是我们要改的。改后就是一组新的过滤了。 改后就是: <pre> '7' => array( 'pattern'=>"/<SELECT[\S|\s]*<\/SELECT>/isU" ,'replace'=>"" ), </pre> 这些只用到1组的过滤函数 只适合一部分即开即合并的标签,如[[JS]]的:<nowiki><SCRIPT src="test/test.js"></SCRIPT></nowiki>,如果用在别的标签上过滤的范围就太大了,如表格的 table 如果我们直接用 <nowiki><table[\S|\s]*<\/table></nowiki> ,那就会将整个表格过滤掉,如果表格中间正好是我们要的内容,那内容也将过滤掉了。 (注: <pre> <table[\S|\s]*><\/table> <table[\S|\s]*<\/table> </pre> 这两开始符是不一样的, 第一个是 标签开始后就马上结束的,开始与结束中间没有内容,第二个没有“>“进行关合标签,那他的范围就是很大了,包括了标签中间的所有内容。所以这儿一定要注意。) 所以,这些中间还有要取的内容的部分,我们就要将要过滤的标签,分成2组来过滤,只将HTML的 开始符与结束符 过滤,而这中间的内容,则保留。 那就是(我们接着第7组,往下添加): <pre> '8' => array( 'pattern'=>"/<table[\S|\s]*>/isU" ,'replace'=>"" ), '9' => array( 'pattern'=>"/<\/table>/isU" ,'replace'=>"" ), </pre> 这样,就过只过滤掉HTML标签了。 然后table 标签中间又有必须的 tr td ,我们接着加上。 <pre> '10' => array( 'pattern'=>"/<tr[\S|\s]*>/isU" ,'replace'=>"" '11' => array( 'pattern'=>"/<\/tr>/isU" ,'replace'=>"" '12' => array( 'pattern'=>"/<td[\S|\s]*>/isU" ,'replace'=>"" ), '13' => array( 'pattern'=>"/<\/td>/isU" ,'replace'=>"" ), </pre> 这样就完成了表格HTML标签的过滤,大家可以按自己需要,再添加别的。 操作步骤也很简单,总结下就是: * COPY 4行一组的过滤,帖下面,然后改第一行的 数字,再改第二行的 标签。 ==参考来源== *[http://www.lonmo.com/cmsware/manual/ 参考来源] [[category:CMSware]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)