网上关关采集规则很多,但会写规则的就少了很多了。看到一个满意的网站,想把它拿下(不厚道地哈哈),还得学点功夫,这篇文章教你怎么打功夫的。
首先最好懂点HTML,不懂也没所谓,照样做也行。
我们先了解下关关采集器通用替代符
1. \d* 表示数字
2. \s* 空格或换行
3. .+? 表示不需要的字符
4. .* 表示字符
5. ( ) 表示需要截取的部分
6. ((.|\n)*) 章节内容截取
7. . 表示单个字符
8. $ 表示结束字符 例如正则表达式weasel$ 能够匹配字符串”He’s a weasel”的末尾,但是不能匹配字符串”They are a bunch of weasels.”。
9. ^ 表示一行的开始
10. < [^<]*((?<=<(?:img|IMG)[^>]*(?:(?:src|SRC)(?:\s*=\s*(?: [“‘]?))))(?:[^\s”‘>]*)\.(?:jpg|gif|jpeg|bmp|png|GIF|JPG)) [^>]*> 万能图片代码
下面开始演示如何编写关关规则,由小A手把手教学:
第一步 :
1.这里我们假设一个网站和小说名称:奥施网 http://www.ahsze.com 小说《奥施大陆》。不要试着复制搜索了,我这没有小说。
2. 在关关根目录里的Rules文件夹里建一个.XML文件,文件名随意;也可以复制一个原有规则为采集模板进行修改,文件名随意。
3.打开关关规则编辑器 选择随意文件.xml,载入。
4. 开始编写规则.
第二步
1.RULEID(规则编号)这个任意写即可
2.GetSiteName(站点名称)这里我们写ahsze.com
3.GetSiteCharset(站点编码) 这里我们打开目标网站从源代码里查找 charset=, 得到charset=gbk这个gbk就是我们需要的站点编码。
4.GetSiteUrl(站点地址)目标站地址 写入http://www.ahsze.com
5.NovelSearchUrl(站点搜索地址) 这个搜索栏地址的获得,按照每个网站程序的不同,适当的修改(也可以忽略)
6. NovelListUrl(站点最新列表地址), 目标站点显示更新的网址,例如 http://www.ahsze.com/modules/article/toplist.php?sort=lastupdate
7.NovelList_GetNovelKey(从最新列表中获得小说编号)在这个规则中我们要获取小说名和小说编号.
“查看源文件”是我们编写这个规则的时候找到想要获得的内容所在的地方,比如我们打开地址看到想要获得的内容的小说的名字是“奥施大陆”我们在源文件里面找到“奥施大陆”,如下:
<ul>
<li class=”t1 red12″>1</li>
<li class=”tt3″><a href=http://www.ahsze.com/book/1258.html title=”《奥施大陆》
小说内容提要: 【作品简介】:
” target=”_blank”>奥施大陆</a></li>
<li class=”t5″><a href=”/bookreader/10071-3622060.html”>奥施大陆</a></li>
<li class=”t4″><a target=”_blank” href=”http://www.ahsze.com/modules/article/authorarticle.php?author]=小明>小明</a></li>
<li class=”t7″>3624007</li>
<li class=”t6″>连载中</li>
<li class=”t8″>12-13-09 22:13</li></ul>
以上代码中 我们要找到 <li class=”tt3″><a href=http://www.ahsze.com/book/1258.html title=”《奥施大陆》”, 把这段代码改成:
<li class=”tt3″><a href=http://www.ahsze.com/book/(\d*).html title=”《(.+?)》 ,其中 (\d*) 表示小说编号 (.+?) 表示小说名 测试下 获取正常
8.NovelUrl(小说信息页地址)这个很简单, 比如http://www.ahesze.com/book/1258.html这本小说我们可以看到的,
我们改下,将里面的1258 换成 {NovelKey} ,
一般情况表示小说编号,就是 http://www.ahsze.com/book/{NovelKey}.html
9.NovelErr(小说信息页错误识别标记) 这个我们随便输入一个没的小说的编号如http://www.ahsze.com/book/1234465460.html,这样我们获得的错误标记就是:对不起,该文章不存在!
10. NovelName(获得小说名称正则)我们随便打开一本小说http://www.ahsze.com/book/1258.html查看源代码,获得小说名称,这个我们可以从固定模式着手,比如我们刚才打开的<奥施大陆>这本小说,我们看到他的固定小说名格式是《奥施大陆》,那我们在源代码里,找到《奥施大陆》这个,我们得到的内容是:
《<a href=”/book /1258.html” id=”htmltimu” title=”奥施大陆”>奥施大陆</a>》 改成 《<a href=” /book/\d*.html” id=”htmltimu” title=”.+?”>(.+?)</a>》
NovelAuthor(获 得小说作者)、LagerSort(获得小说大类)、SmallSort(获得小说大类)、NovelIntro(获得小说简介)、 NovelKeyword(获得小说主角(关键字))、NovelDegree(获得写作进程)、NovelCover(获得小说封面) 这些同 10. 一样获取即可
11.NovelInfo_GetNovelPubKey(获得小说公众目录页地址)这个的地址获得跟上面的一样的方法
12.PubIndexUrl(公众目录页地址) 这个我说明一下,这个的用法这个一般是在知道采集目标站的动态地址的时候用到,如果不知道对方动态地址的话就在这个里面写入{NovelPubKey} 如果知道动态路径比如说http://www.zhetianxs.com这个站的没本小说的章节目录的动态地址是那么 PubIndexUrl 这个的规则就是
http://www.ahsze.com/modules/article/reader.php?aid={NovelPubKey}
PubVolumeSplit(分割分卷)这个分割分卷 有写地方需要注意到 如果分割分卷的正则没对 那么有可能 对于下面的 获得章节名那些有很大的影响 这里 我们获得 分割部分的代码呢 按我的经验呢 是找到第一个 分卷 跟下面的分卷 查看他们的共同处 在我们分析这个目录章节里面的源代码 可以看出他们有个共同点 拿这一段来说明下:
<dt>
<strong>奥施大陆正文
</strong>
</dt>
单一代码为 <dt>
<strong> 修改正则 为<dt>\s*<strong>
其中的\s* 表示 匹配 与任何白字符匹配,包括空格、制表符、分页符等 也就是说 在 </ul> 与<dt><strong> 之间 不管有多少个空格 都可以用 \s* 来表示 .
14.PubVolumeName(获得分卷名) 想要获得准确的分卷名,必须在上面的分割部分的正则必须正确,一般情况下分割部分跟分卷名是在一块的,上面我们说明分割部分用到的:
<dt>
<strong>奥施大陆正文
</strong>
</dt>
大家如果有注意看到的话 会发现 里面有 我们在这一步里面要获得的分卷名
我们 改下代码 <dt>\s*<strong>(.+?)</strong>\s*</dt>
15. PubChapterName(获得章节名) 这个我们拿一段来说明<li><strong><a href=”/bookreader/1258-3467015.html”>仙墓</a></strong></li>
如果有碰到时间、日期、更新字数什么的我们直接忽略,因为这些不是我们要获得的内容,这个我们可以用 .+? 来表示。 好了我们吧上面的那一段改下改成表达式
<li><strong><a href=”.+?.html”>(.+?)</a></strong></li>
不是单行的话我们用\s* 来表示N个换行符.
16.PubChapter_GetChapterKey(获得章节地址(章节编号))这里说明下 这个里面的章节编号是在下面的 PubContentUrl(章节内容页地址)用到,那么这里我们需要获得的是章节地址分析得到
<li><strong><a href=” (\d*.html) “>.+? </a></strong></li>
章节地址那为什么我们还有用到章节名的呢?这个说下主要就是为了避免获得的章节名跟获得的章节地址不匹配。
如果是章节页是乱序的这里就要获得章节编号了(强烈见意用户用获得章节编号)
我们说下章节编号的写法 其实并不麻烦只需要稍微改下就行了。
<li><strong><a href=”/ahsze/\d*-(\d*).html”>.+?</a></strong></li>改成这样就可以了.
17. PubContentUrl(章节内容页地址) 这里我拿http://www.ahsze.com/book/1258-3287009.html这个来说明下该怎么用,其中的1258 这个是小说编号这里我们用{NovelKey} 替代,3287009这个就是在 PubChapter_GetChapterKey 里面获得的 章节编号我们{ChapterKey} 替代,以后我们分两种写法说明
http://www.ahsze.com/bookreader/{NovelKey}-{ChapterKey}.html
注: 这种写法 PubChapter_GetChapterKey里必需是获得章节编号的如 “<li><strong><a href=”/book/\d*-(\d*).html”>.+?</a></strong></li>”
或者直接用{ChapterKey}
18. PubContentText(获得章节内容),这个获得方法我们就拿http://www.ahsze.com/book/1258-3287009.html这个地址来说吧,打开源代码我们看到
</p>
</div>
<div class=”novel_content”>
小明_奥施网<br />
…………….
完
</div>
我们把<div class=”novel_bottom”>
直接改成 <div class=”novel_content”>((.|\n)+?)<div class=”novel_bottom”>
((.|\n)+?)为我们要获取的内容。
19.PubContentImages(章节内容中提取图片正则) 章节中图片可以直接用我们上面提到的万能图片规则
<[^<]*((?<=<(?:img|IMG)[^>]*(?:(?:src|SRC)(?:\s*=\s*(?:[“‘]?))))(?:[^\s”‘>]*)\.(?:jpg|gif|jpeg|bmp|png|GIF|JPG))[^>]*>
20.出现空章节情况有可能是目标站正好重启网站或者你的采集IP被封等原因
如 果不是以上原因,请先检查你采集的章节是否是图片章节,如果你的PubContentImages(章节内容中提取图片) 没有获得图片章节内容的话软件 就会检查你的采集文字内容 PubContentText(获得章节内容)这个里面的正则的匹配,如果 PubContentImages(章节内容中提 取图片) 跟PubContentText(获得章节内容) 都没有匹配的内容,那么就出现了上面我们说的空章节的原因。
21.最后说一下分类。
分类设置在关关软件的“设置”–“分类对应”里,要采集一个网站的内容对应到你自已的分类的话,这里就是设置了,每个网站分类都不一样的。