關關採集器的規則編寫方法/教程:
第一步: 我們先複製一份原來的規則 做模板 比如說我今天演示的採集站點是 feiku 這個小說站點
那麼我就把我複製的那份做模板的規則 命名為 dhabc.xml 這個主要是便於記憶
第二步: 我們運行 採集器里的規則管理工具 打開後載入剛剛我們命名為 dhabc.xml的這個XML文件
第三步: 開始正式編寫規則了
1. RULEID(規則編號) 這個任意
2. GetSiteName(站點名稱) 這裡我們寫 飛庫網
3. GetSiteCharset(站點編碼) 這裡我們打開 www.dhabc.net 查找 charset= 這個 =號後面的就是我們需要的站點編碼
www.dhabc.net 我們查到的 編碼是 gb2312
4. GetSiteUrl(站點地址) 這個就不用我說了吧 寫入 http://www.dhabc.net/
5. NovelSearchUrl(站點搜索地址) 這個地址的獲得 得按照每個網站程序的不同而言
不過呢有個通用的方法就是 通過抓包來獲得自己想要的內容
雖然說是通過抓包來獲得但是 怎麼就知道獲得的就是我們想要的呢
看我操作 首先我們運行封包工具 選擇 IEXPLORE.EXE 這個進程 最好是你只開一個網站也就是你只 打開了 你要想編寫規則的那個網站 確保進程里只有一個IEXPLORE.EXE這個進程
這裡我們 我們可以 看到提交的地址是 /book/search.aspx 我們來組合一下 得到的地址 是 http://www.dhabc.net/book/search.aspx
而提交 內容的代碼是SearchKey=%C1%AB%BB%A8&SearchClass=1&SeaButton.x=26&SeaButton.y=10 但是對於我們有用的是 SearchKey=%C1%AB%BB%A8&SearchClass=1 這一段 這裡獲得的這段 將在NovelSearchData(搜索提交內容) 這裡用到 把這段改成我們想要的代碼就是 把這一段%C1%AB%BB%A8 替換成 {SearchKey} 這個 表示搜索提交的內容 完整的代碼是 SearchKey={SearchKey}&SearchClass=1
然後我們測試下是否正確 經過測試 我們獲得的內容是正確的
6. NovelListUrl(站點最新列表地址) 這個我就不說了 因為這些 每個站點的不同 這個就需要自己去找了 FEIKU 的是 http://www.dhabc.net/Book/ShowBookList.aspx
7. NovelList_GetNovelKey(從最新列表中獲得小說編號此規則中可以同時獲得書名 獲得書名是在手動模式的時候用到 如果你要用手動模式 那麼必須獲得書名 否則 手動模式將會無法使用)
我們 打開 http://list.dhabc.net/book/showbooklist.aspx 這個地址 查看源文件
我們編寫這個規則的時候 找到想要獲得的內容所在的地方 比如 我們打開地址 看到 想要獲得的內容的 第一本小說的 名字是 立地成魔 我們在源文件裡面找到 莫倫特傳
<ul>
<li class="li1"> <a target=_blank href="/Book/LN/131.html" >奇幻</a></li>
<li class="li2"><a target=_blank href="/html/book/130/150557/List.shtm" ><font color="#006699">[目錄]</font></a> <a href="http://www.dhabc.net/Book/150557/Index.html" target="_blank"><font color="#006633">莫倫特傳</font></a></li>
<li class="li3"><a href="/html/book/130/150557/3946236.shtm" target="_blank">第一卷 第八章 黑暗崛起</a></li>
<li class="li4">11月27日</li>
<li class="li5"><a href="/Author/WB/150557.html" target="_blank">巨龍之瞳</a></li>
<li class="li6">連載 </li>
</ul>
我們編寫規則用到的代碼其實也不是很多 我編寫規則的原則是能省則省 也就是說代碼 越短越好除非萬不得已 一般精短一些比較好
好了不廢話了 在這個規則裡面 我們需要用到的是 <a href="http://www.dhabc.net/Book/149539/Index.html" target="_blank"><font color="#006633">立地成魔</font></a>
我們將這段改下 <a href="http://www.dhabc.net/Book/(d*)/Index.html" target="_blank"><font color="#006633">(.+?)</font></a> 其中 (d*) 表示編號 (.+?) 表示 小說名 經過測試 正確
8. NovelUrl(小說信息頁地址) 這個很容易 我們隨便點開一本小說 就能知道了 比如說 http://www.dhabc.net/Book/150557/Index.html 這本小說 我們可以看到的 我們改下 將裡面的 150557 換成 {NovelKey} 一般情況表示小說編號 http://www.dhabc.net/Book/{NovelKey}/Index.html
9. NovelErr(小說信息頁錯誤識別標記) 這個 一般是 http://www.dhabc.net/Book/149539/Index.html 吧 中間的 那個 編號隨意改變下 比如 http://www.dhabc.net/Book/15055799/Index.html 這樣我們獲得的錯誤標記就是 未找到該編號的書籍信息!
10. NovelName(獲得小說名稱正則) 我們隨便打開一本小說 http://www.dhabc.net/Book/149539/Index.html 查看源代碼 獲得小說名稱 這個我們可以從固定模式著手 比如我們剛才打開的 立地成魔 這本小說 我們看到他的固定小說名格式是 《立地成魔》 那我們在源代碼里 找到 《立地成魔》 這個 我們得到的內容是 <div id="CrBookTitle"><span class="booktitle">《立地成魔》</span></div> 這一段 我們改下 <div id="CrBookTitle"><span class="booktitle">《(.+?)》</span></div>
下面的 NovelAuthor(獲得小說作者) LagerSort(獲得小說大類) SmallSort(獲得小說大類) NovelIntro(獲得小說簡介) NovelKeyword(獲得小說主角(關鍵字)) NovelDegree(獲得寫作進程)
NovelCover(獲得小說封面) 這些呢 我就不演示了 這些跟上面的那個獲得小說名 方法是一樣的 也就所謂的一通百通
這裡有些時候獲得的內容裡面有些不想用到的 因為格式不固定有些內容只能先獲得然後在用過濾功能 過濾掉 過濾的用法 在後面有說
11. NovelInfo_GetNovelPubKey(獲得小說公眾目錄頁地址)
這個的地址獲得跟上面的一樣的方法 這裡我就不說明了
12 PubIndexUrl(公眾目錄頁地址) 這個我說明一下 這個的用法 這個一般是在 知道 採集目標站的動態地址的時候用到 如果不知道對方動態地址的話 就在這個裡面寫入{NovelPubKey} 如果 知道動態路徑
比如說 http://www.dhabc.net 這個站的沒本小說的章節目錄的動態地址是 http://www.dhabc.net/Book/149539/Index.aspx 那麼 PubIndexUrl 這個的規則就是 http://www.dhabc.net/Book/{NovelKey}/Index.aspx
13. PubVolumeSplit(分割分卷) 這個分割分卷 有寫地方需要注意到 如果分割分卷的正則沒對 那麼有可能 對於下面的 獲得章節名那些有很大的影響 這裡 我們獲得 分割部分的代碼呢 按我的經驗呢 是找到第一個 分卷 跟下面的分卷 查看他們的共同處 在我們分析 http://www.dhabc.net/html/book/130/149539/List.shtm 這個目錄章節裡面的源代碼 可以看出他們有個共同點 拿這一段來說明下 </ul>
<div id="feiku_e_n_d"></div> <div id="mmuu88">力量的追求 </div>
<ul>
從這裡我們可以看到他的共同點 是
</ul>
<div id="feiku_e_n_d"></div> 我們吧他改下改成正則格式 </ul>s*<div id="feiku_e_n_d"></div>
其中的s* 表示 匹配 與任何白字元匹配,包括空格、製表符、分頁符等 也就是說 在 </ul> 與 <div id="feiku_e_n_d"></div> 之間 不管有多少個空格 都可以用 s* 來表示
14 . PubVolumeName(獲得分卷名) 想要獲得準確的分卷名 必須在上面的 分割部分的正則必須正確
一般情況下 分割部分 跟 分卷名是在一塊的 上面我們說明分割部分用到的 </ul>
<div id="feiku_e_n_d"></div> <div id="mmuu88">力量的追求 </div>
<ul> 這一段 大家如果有注意看到的話 會發現 裡面有 我們在這一步裡面要獲得的分卷名
我們 改下代碼 <div id="mmuu88">(.+?)</div>s*<ul> 我們測試下 正常獲得分卷 但是有 這些 我們一般在 過濾規則裡面過濾掉就行了
15. PubChapterName(獲得章節名) 這個我們拿一段來說明
<li><a title="更:2008-10-24 12:58:00
更:3264" href="3859084.shtm">強悍的馴服方法</a></li>
對於這種裡面有 時間 日期 更新字數什麼的 我們直接忽略 因為這些不是我們要獲得的內容 這個我們可以用 .+? 來表示 有些人就問了 為什麼我這裡沒用() 括起來呢 這裡我跟大家說下 我們獲得的內容是()裡面的內容 如果不是你想要的內容但是寫規則的時候又必須用到的 我們 可以吧表達式稍微改下就可以了 好了 我們吧 上面的那一段 改下 改成表達式 <li><a title="更.+?
更.+?" href="d*.shtm">(.+?)</a></li>
正常獲得內容 這個大家是不是看著這個規則有些彆扭 這個是因為 中間有換行符導致的 我沒改下代碼
我們用s* 來表示N個換行符 我們改後的代碼是<li><a title="更.+?s*更.+?" href="d*.shtm">(.+?)</a></li> 現在是不是好些了 經過測試 也一樣正常獲得內容 說明規則無問題
16. PubChapter_GetChapterKey(獲得章節地址(章節編號)) 這裡說明下 這個裡面的章節編號是在下面的 PubContentUrl(章節內容頁地址)用到 一般式知道目標站的動態地址 靜態地址一般用不到 在不知道目標站的動態地址 那麼 這裡 我們需要獲得的 是 章節地址 分析得到 <li><a title="更.+?
更.+?" href="(d*.shtm)">(.+?)</a></li> 這裡既然是獲得章節地址 那為什麼我們還有用到 章節名的呢 這個說下 主要就是為了避免獲得的章節名跟 獲得的章節地址不匹配
這裡在說下章節編號 的寫法 其實並不麻煩只需要稍微改下就行了
<li><a title="更.+?
更.+?" href="(d*).shtm">(.+?)</a></li> 改成這樣就可以了
我們測試下看看 看到了吧 這樣改下就是獲得編號了 這個獲得的編號 只能在 知道目標站動態地址的情況下采有用到
17. PubContentUrl(章節內容頁地址) 上面的獲得章節地址裡面有說明 這個是在知道目標站的動態地址的情況下 用到 因為一般靜態地址用不到 這裡我拿 http://www.dhabc.net/html/book/149539/3790336.ASPX 這個來說明下 該怎麼用
其中的 149539 這個是 小說編號 這裡我們用 {NovelKey} 替代
3790336 這個 就是在 PubChapter_GetChapterKey 裡面獲得的 章節編號 我們用 {ChapterKey} 替代
組合一下 就是 http://www.dhabc.net/html/book/{NovelKey}/{ChapterKey}.ASPX 這個就是我們的動態章節地址了
!!!記住 前提是 知道對方的動態地址 !!! 如果不知道對方的動態地址 那麼我們在 PubContentUrl(章節內容頁地址) 這裡寫的內容就是 {ChapterKey}
18. PubContentText(獲得章節內容) 這個獲得方法同於 獲得章節名的那些 這個就不說明了
推薦閱讀: