• 欢迎访问誉卿博客,推荐使用最新版火狐浏览器和 Chrome 浏览器访问本网站。

  • 初不解禅心未住,悟后逍遥游处方。 山水有情皆由心,见山见水皆天堂。

通俗图文采集实例讲解

网络 yqdnsjs 12年前 (2013-02-19) 259次浏览 扫描二维码

今天我们要采集的目标站是39健康的性爱频道: http://sex.39.net/
我们随便挑一个栏目来做规则(坛友让我做的是夫妻保健栏目),http://sex.39.net/care/fqxbj/index.html
如图1:

打开后可以看到文章的列表,页数还蛮多的,如图2:

我们现在研究一下列表页的规则,我通常是向后翻几页,再点到最后一页,然后再回到第一页
我们把列表页做个简单对比:
第一页:http://sex.39.net/care/fqxbj/index.html(我尝试了一下用http://sex.39.net/care/fqxbj/index_1.html来访问,结果不行;)
第二页:http://sex.39.net/care/fqxbj/index_2.html
第三页:http://sex.39.net/care/fqxbj/index_3.html
最后页:http://sex.39.net/care/fqxbj/index_93.html
经过对比,我们轻松的找出了它们的规则;
我们回到P8后台采集规则的界面来制作标题的规则,设置如图3:

现在我们继续,下要我是要取得文章链接以及标题,这一步需要一点HTML的知识,其实不会也没关系,只要你耐心点,多对比一下代码,
也是能够制作出规则的;
首先,我们使用浏览器IE或者是别的,使用它们的查看源代码工具,打开网页的源代码,呵呵,打开一看,乱七八糟的一大堆,看得眼睛都花了,没关系,
will教新手们一招,按Ctrl+F使用查找功能,查找第一篇文章的标题(注意查找技巧),注意仔细观察前面的代码,如图4:

现在我来来对比每个标题所具有的相同规律的代码,注意哦,只有标题的规则相同哦,
为了便于分析,我们可以把代码整理一下(注意随机对比哦,要兼顾所有的标题才行),如图5

经过对比,我们还是可以很容易的找出其中的规律的,我们取出我们找出的这段代码:

复制代码

然后把它填入到后台相应的地方,为P8规则的变量来替换相应的地方;替换好以后效果如下面的代码:

复制代码

  1. <li><a href=”{url=NO”}”>{title=NO<}</a></li><li>{*}</li>

这个我就不多讲了,因为具体的后台有说明;
现在我们来测试一下采集标题,结果如图6

标题能采集回来并且链接正确就说明规则没什么问题了
我们点击下一步,开始制作内容的采集规则
我们随机打开两到三篇文章察看,并全部打开查看其源码,对比一下文章内容部分前后的源码,
文章网页界面如图7

由界页我们可以看出,文章内容部分需要过滤的东西还是蛮多的,前面的有文摘广告,有图片广告
我们再来看看源码吧,和标题的方法一样,我们搜索文章的开头来定位,如图8

和标题不一样的是,内容部分必须找出跟整个页面里代码特殊的地方,但其在所有内容页面里又必须有规律
经过若干面页的对比,我们不难发现在文章开头都是以

复制代码

  1. <div>

开始的,这段代码必须在整个页面中具有唯一性,

复制代码

  1. </div>
  2. <div>

结尾的,这也是整个页面中唯一的,
因为有分页,所以我们必须把分页的代码也取出来,也就是

复制代码

  1. <div><a href=”1037278.html” target=”_self”>第一页</a> <a target=”_self” href=”1037278.html”><font color=”#FF0000″>1</font></a> <a target=”_self” href=”1037278_1.html”>2</a> <a href=”1037278_1.html” target=”_self”>下一页</a> <a href=”1037278_1.html” target=”_self”>最后一页</a></div>

这部分,这段我们可以把它简化成

复制代码

  1. <div>{*}</div>

中间用通配符代替,注意了,各位,

复制代码

  1. <div>

,这也是整个页面中唯一的,
所以内容规则部的代码就出来了:

复制代码

  1. <div>{content=*}</div>
  2. <div>{*}</div>

是不是很简单?
呵呵,还没完呢,我们还需要过滤掉内容中多余的部分,以及设置分页;
我们继续查看源代码,现在要看的部分就集中在文章内容里,也就是{content=*}里
我们仔细观察,可以看到,在文章内容部分每个插入的广告都是放置在一个DIV层里的,所以
这个站的过滤还是比较容易设置的,就是把所有<div加上一个属性style=”display:none;”就OK了,
代码如:

复制代码

  1. <div|<div style=”display:none;”

然后,我们开始设置分页,
我分析一下分页,寻找其规律
第一页:http://sex.39.net/care/fqxbj/0910/23/1037278.html
第二页:http://sex.39.net/care/fqxbj/0910/23/1037278_1.html
第三页:http://sex.39.net/care/fqxbj/0910/23/1037278_2.html
在分页3步曲里,我们第一步就应该填入:

复制代码

  1. .html

第二步填入:

复制代码

  1. _page.html

第三步选是,
现在我们可以测试一下采集内容了,
测试的时候发现几乎在每篇文章后面都有

复制代码

  1. (实习编辑:司徒穗彩)

这么一段,所以把这个也过滤掉!
代码如:

复制代码

  1. (实习编辑:司徒穗彩)|

然后再测试保存,导出规则,就可以给别人分享了!
关于一些常见问题的补充:
1.有一次我采集单页发现在采集回来的标题链接不对,怎么办?
我发现,我原本填的地址是如:http://kankan.0743.com/b/a
这样的形式,测试采集发现在标题链接不对
我试着给地址后台加上一个主页,index.html(注意察看具体网站的后缀格式)
即填入这样的地址:http://kankan.0743e.com/b/a/index.html
再测试,链接就正确了;
2.分页设置的若干问题
P8的分页我也不是很懂,我就说说我的理解吧
首先,做采集规则的时候必须把分页的代码要加进去,这样程序才能识别分页;
然后,分页设置的三步,前二步一般是必设的,第一步,一般填上网页的后缀如.html之类的
如果是动态页,为空的话,那则空着
第二步,也就是对比首页和后页从左到右对比有什么不同,把不同的地方全部填进去,页数用[page]替换,
如果是动态页,一般直接填上[page]就行了!
第三步就不用说了!
好了,实例讲解到此结束,有不通之处还请见谅,呵呵,高手请绕过!
补充纠正一下,关于P8分页采集,以前有些误解,其实并不需要把分页代码采回来,P8的分页采集机制和别的采集工具还是有些区别的!!
==========================================================================================
今天一上来发现自己的这篇帖了置顶了,呵呵,把这部分增加的也转移过来了!!
==========================================================================================
此部分添加于:2009年12月2日
使用P8采集也近一个月了,积累了不少使用心得!这帖也将近开了一月了吧!其实关于采集,本人写过一篇图文教程,可惜世人皆喜欢不劳而获的东西,对于教程之类的东西视之若惘。我想做为一个站长或者说是长期混于网络的人来,最基本的也最应该具有的技能应该是搜索吧!在网络上大部分想要的东西也都是能搜索到,搜索的精确与否就在于每个人的搜索技巧了。至于你搜索不到的东西,要怎么解决???
求助??==无助!!再搜索??==还是没结果!!懒人等喜欢等待!!!去论坛发个求助帖,接着继续等待!!!COME!!兄弟,你有这么大把的时间用来求助倒不如把时间花到自己研究问题上去,研究再研究!!!弄不懂就查资料,基本资料的搜索总会吧!!问题不解决,吃饭会想着,睡觉会想着,连做梦也在寻找结果,也许最后在痛苦的思索过程中,有一个时刻,突然灵光一闪,问题这样迎刃而解了!!当然,有高手指点固然是好,呵呵,可高手哪有时间天天来解答你的基础问题!!兄弟,如果你口袋有M,也不屑于问津技术领域,那就绕过!!
好了,啰嗦了一大通,也不知有几个人能看懂,下面来说说P8的采集!!!
其实对于简单的文章规则,如果你能看懂HTML代码(相信正常人花上一天的功夫就能看懂),5分钟不到就能写出这条规则!!
基本的东西我这里就略过了,对于完全不了解P8采集的可以从这里开始:
整站采集教程(入门)–<1>
整站采集教程(如何过滤内容的广告内容)–<2>
如何采集一篇文章中的多页?(进阶)
我也是从这里开始了解P8采集的,基本上看了龙城的这三篇文章对于采集是有个总体的了解了!!
我只是稍补充一下,说的是本人在日常采集中使用的一些技巧!!
采集分为 列表采集,内容采集,我讲的主要都是在高级应用里的一些东西
首先讲列表采集的高级设置:
我习惯是使用下面这两项的:

复制代码

  1.      欲截取页面中的指定部分的标题链接地址,此部分标题在整个页面HTML代码所在位置之前唯一出现的字符串
  2. (目的,去除指定标题之前无用信息,更准确无误的采集指定标题链接地址)

 

复制代码

  1.    欲截取页面中的指定部分的标题链接地址,此部分标题在整个页面HTML代码所在位置之后最先出现的字符串,但不在标题所在html代码里出现过
  2. (目的,去除指定标题之后的无用信息,更准确无误的采集指定标题链接地址)

     好处上面写得很清楚了,我就不多讲了。
如果你不用这两项,写列表规则的时候在{url=*}变量前后还得加一大串HTML代码,加了后,只要保证填写的规则是截取部分唯一就行了。
下面的开头和结尾正则也可以使用,碰到一些变态的列表,模板完全没有规律可寻时,我就会使用开头正则,把多余的HTML代码去除掉,把要所有的列表代码都整成一样的,好让我更好的做规则。
内容的采集其实没什么好多讲的,比列表的要容易些,主要就是内容里有些东西的过滤问题,龙城讲的是简单把不需要的部分隐藏,我一般都是使用正则把不要的部分直接过滤掉,这招我也是在论坛里学到的,不过如果兄弟们可以灵活运用,任何内容都能过滤!!
以下放出我常用的正规则代码,一般使用你们直接填到内容高级设置里的这里就行了:

复制代码

  1. 结尾PHP正则程序语法
  2. (适合处理采集比较怪僻的网站.不懂PHP程序的,请留空,否则会出现严重问题使得采集程序无法运行)

    常用正则过滤代码如下:

复制代码

  1.   $search = array (“‘<script[^>]*?>.*?</script>’si”,//过滤SCRIPT标记
  2.                 “‘<iframe[^>]*?>.*?</iframe>’si”, //过滤IFRAME标记
  3.                 “‘<style[^>]*?>.*?</style>’si”,//过滤STYLE标记
  4.                 “‘<[\/\!]*span[^<>]*?>’si”,//过滤SPAN标记
  5.                 “‘<[\/\!]*font[^<>]*?>’si”,//过滤font标记
  6.                 “‘<[\/\!]*strong[^<>]*?>’si”,//过滤STRONG标记
  7.                 “‘<[\/\!]*table[^<>]*?>’si”,//过滤table标记
  8.                 “‘<[\/\!]*tr[^<>]*?>’si”,//过滤tr标记
  9.                 “‘<[\/\!]*td[^<>]*?>’si”,//过滤tbody标记
  10.                 “‘<[\/\!]*tbody[^<>]*?>’si”,//过滤tbody标记
  11.                 “‘<[\/\!]*input[^<>]*?>’si”,//过滤INPUT标记
  12.                 “‘<[\/\!]*a[^<>]*?>’si”,//过滤A标记,如果要过滤链接中的字,必须在过滤规则中写下。
  13.                 “‘<div class\=\”pagelist\”>.*?</div>’si”, //过滤pagelist的DIV中所有内容
  14.                 “‘<[\/\!]*div[^<>]*?>’si”,//过滤DIV标记
  15.                 “‘&#(\d+);’e”);
  16.         $replace = array (“”,
  17.                   “”,
  18.                   “”,
  19.                   “”,
  20.                   “”,
  21.                   “”,
  22.                   “”,
  23.                   “”,
  24.                   “”,
  25.                   “”,
  26.                   “”,
  27.                   “”,
  28.                   “”,
  29.                   “”,
  30.                   “chr(\\1)”);
  31.         $show_content=preg_replace($search,$replace,$show_content);
  32.        $htmlcode=preg_replace($search,$replace,$htmlcode);

     后面都有注释的
稍讲一下,
如:

复制代码

  1.   “‘<iframe[^>]*?>.*?</iframe>’si”, //过滤IFRAME标记

    过滤的是标记以<iframe[^>]*?(这里是除了>符号外的所有字符)>开头到</iframe>间的所有内容,
你可以灵活套用一下,比如你采的内容里有个讨厌的广告代码但是他不是script调用的,怎么办??呵呵,广告总是有样式的吧,现在流行DIV+CSS布局,一般都会包含在一个DIV里,<div id=”will”>广告,好多呀</div>
那套用后就写成

复制代码

  1. <div id\=\”will\”>.*?</div>

   你得写成P8约定的格式:

复制代码

  1. “‘这里是你要填写的正则’si”,//看到没,正则包含在’号里,后面的’号还跟着个si然后再用”包起来

 

复制代码

  1. \

这个符号是正则里用来转义的,在一些符号前要加上 ,上面的=号,双引,单引,都有用到哦!!

复制代码

  1. $show_content=preg_replace($search,$replace,$show_content);
  2.        $htmlcode=preg_replace($search,$replace,$htmlcode);

   这两行,你随便套用一行就可以了,preg_replace是个PHP的函数,用法你可以GOOGLE一下!!
还有一点我补充一下,

复制代码

  1. .(点)在正则里是匹配同一行的内容如果<div id=”will”>广告,有多行</div>,那你就会发现,上面的正则匹配不了!!
  2.      多行就用[\s\S]来代替.(点)
  3.      [code]<div id\=\”will\”>[\s\S]*?</div>

     div可以换成table,可以是ul可以是p可以是任何字符,汉字也行!!
你可以先用正则工具测试自己写的正则是否正确,再把它应用上,就行了!!
这里只是放出一些常用的代码,即使不懂正则的兄弟,好好看看,也能举一反三直接套用!!

复制代码

  1. “‘<[\/\!]*div[^<>]*?>’si”,//过滤DIV标记

这个我不解释相信大家也能看懂吧,就只是过滤掉类似<标记>或者</标记>这样的html代码的,

复制代码

  1. “‘<[\/\!]*a[^<>]*?>’si”,//过滤A标记,

这段过滤内容中链接的经常用到哦!!
好了,这讲到这里,这是自己用到的一些小技巧罢了,希望能帮上一些兄弟!!!!
不另一开一帖是知道会沉得很快,呵呵!!!最近比较忙,不可能天天逛P8论坛,希望申请免费规则的各位见谅!!!(急的话可以直接联系本人写收费规则,详情见签名!!期待各位多多帮忙,争取年底拿到一颗钻!!)
最近在研究P8的采集文件,学到不少东西,正尝试着修改,修改好后会放出,希望大家长期关注本帖,更请多多顶帖!!!!
==========================================================================================
2009年12月4日
今天在给403楼(jogger123) 的[食品伙伴网>>仪器试剂采集规则]
做这个规则的时候脑里突然浮出P8的gahter文件代码来,想着以前有次采某个网站,搞死了也采不到标题名称,一直以为P8的标题名称就只能在列表页获取,今天做这条规则的时候尝试了一下从内容页获取,呵呵,结果和自己想的一样,可以实现标题从内容页再获取一次,最后是以内容页获取的为准!!灵活一点,P8可以引入自己的变量,譬如目标站上有多个下载地址,多个图片地址,多个FLASH地址,呵呵,可以先用自设的变量获取数据,在最后再用PHP处理一下,把这些变量按要入库的数据格式联接起来,可以实现多个下载地址,多个图片,多个FLASH地址同时入库了,呵呵,此处只是给出思路,具体实现起来应该也不难!!!
========================================================================================== 

喜欢 (0)