发现不少人在采集方面有些或多或少的问题。今天来说一下采集技巧。
说之前先提一下:如果想要取得他人的帮助,光说一下“XX网页我采不到”,或是“XX网页的XX正则我怎么设不对呀”,一般比较少会有人来帮你。因为想要帮你,帮你者就必须自己先写一个完整的那个网站,或是至少那个列表页的采集正则。在你是问某一个小问题,在别人就是大动工的写一整套正则了——最差最差,也是要打开那个网页,一点点地找正则所在……别人不是该你的,有没有义务是一回事,有没有精力又是另一回事。就算勤劳如莲,大多数时间也是懒得理会,爬爬走过的
所以,如果想取得他人的帮助,最好是哪个正则有问题,就把自己写的那个部分正则也贴出来(如果能贴全套的则更好,别人可以整套地帮你测试),无论是寻找症结所在,还是节省他人时间上,都是很有帮助的。
另外,也不要把想取得帮助的网页的代码整个的复制粘贴上来,贴个网页地址就可以了,你贴一大片代码,进来看的人一下就被吓出去了……
下面来说一下采集技巧:
个人经验:
1.采集的正则能写得越简单越好。
当然,复杂的话针对性强,比较不容易采到不要的内容,但能在保证不采到不要的内容的前提下,越简单,一个正则对该网页的通用性就越强。比如说一样是采<a
href="链接">这个链接,个人觉得,如果你已经设定了链接区域,区域内不会有别的链接的话,与其把链接正则写成<a
href="[!--newsurl--]">,还不如写成href="[!--newsurl--]"。这样,万一有几页的链接对方写成了<A
href="链接">,也不会影响你的采集效果。
当然,对方不会莫名其妙地改变自己的模板,上面只是举个例子。而我是懒人,懒人的目标就是用最少的正则采到最多的新闻。
正则写得简单,还是对自己采集水平的一个锻炼。越简单,找正则规律的要求就越高,多锻炼自己,采集时才比较容易一次就采到自己想要的东西。
2.在正则内尽管减少空格和回车的使用。
这样说可能不是很明白。空格谁不用?注意:这里说的不是一个或两个空格,而是大片相连的空格。
空格的存在当然是必要的,但写采集正则时出现大片相连的空格甚至包含大量回车时只能说明两个问题:一,要么是对方的网页太难采集,让你不得不使用大片相连空格及回车来区分采集区域,否则找不到别的办法了;二,要么是你太懒,懒得仔细地找正则,看到什么就是什么,大片的复制下来再说,反正复制得越多越不容易和别的重复。
相信大多数人都是第二种。
但要注意,当你大量复制对方网页代码当成正则时,你也把自己推入了一种很可能采集失败,或是某几页能成功,某几页以失败告终的险境。
某几页成功、某几页失败的原因,同第1条所述,对方有可能偶尔在页面内改变正则。这种情况虽然不大遇到,但要充分考虑到。
大多数复制大量代码当正则的同志,是处于一种不成功便成仁的境地的。因为空格还算好,不会出太多问题;但回车的问题很严重。我采集时,发现,往往有些网页在正则内使用了回车,就会采集失败——完全不认采集区域。回车是个很好的辨识标志,但——具体原因还不明了——有时它会导致整个采集过程的失败。
3.分页区域正则。
很多人能很好地设定整个页面的正则,但往往失败在分页正则上(我到现在都不是每个分页都能采得到)。这里提几个技巧。
第一,尽量不要把分页区域包含在新闻正文正则内。这一点……如果有人看菜鸟手册的话……严正声明,那里面是写错的,当时对采集不是很了解,所以写错了。如果把分页区域包含在新闻正文正则内,会导致采到的新闻有两行第1页、第2页等的显示——因为把对方的分页也当正文采来了。
第二,要注意“上下页导航”和“全部列出式”。现在大多数网页是两种模式同时存在的。所以在写正则时,如果你是使用某一种模式,要注意过滤掉另一种模式的链接,不然会导致采到过多的分页,一般是会出现两个第2页。
第三,当分页采集屡屡失败,又实在查不出错在哪里时,请看一下第2、3、4……页的新闻正文的正则,是否与你写的新闻正则一致。有的网页,后面几页用到的代码和第一页会不一样,往往会比第一页少掉一些,这时,如果你用的新闻正文正则正好用到了后面几页没有的代码,那你分页正则即使写得完全没有问题,由于后几页的正文它采集不到,显示出来的就是没有采到分页(T_T
某莲曾在这个问题上给它耗掉整整一个晚上,血泪史啊……)
4.采集中尽量减少用*,或者,至少有选择性地用*。
比如<a href="链接">OOXXOOXX</a>这个,不少人喜欢用<a
href="[!--newsurl--]">*</a>来采集。但是试问,这个*有什么意义吗?列位哪位有见过,有哪个<a>.....</a>之间是没有东西的吗?所以这个*放在这里,有放没放是一个样的。除非是这个链接正则太复杂了,一定要靠*之后的代码继续区分判断,以过滤掉不要的,这时才需要用*。
用*有一个弊端——在你对正则看得不是很清楚,不太负责任地加*的时候,很可能不能完全采集到你想采集的内容,或是一不小心把要采集的内容去掉了。所以能不用*尽量不要用*。
|