簡單易用粗暴的文章內容采集程序 -【開源項目】

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

更新:通過一些朋友的回復,了解到,可能文章太長了,有朋友只是簡略瀏覽,所以還沒有明白程序工作流程。

簡單介紹,這個程序是給程序員用的,使用這個軟件,必須是會寫正則的朋友,或者是有朋友幫忙寫正則。

這個程序不是針對某個網站或者網頁而寫的,而是一個“采集框架 ”——說是框架,有點大了。

但是核心的一點就是,只要會寫正則,幾分鐘就可以針對一個采集目標,編寫一個采集規則。

只需要4(3)個正則,就可以完成任務。

列表網址、頁面標題、頁面內容、頁面鏈接

 

如果是逐頁采集模式,列表網址的正則可以忽略。

 ------------------------------------------------

前言

愛學習、愛使用移動設備閱讀電子書的朋友,不能不擁有一款屬于自己的采集利器。

而使用此程序即可以簡單輕松的實現采集任務。

采集效果圖

程序介紹

 在程序運行子目錄 Config 是程序的配置的保存目錄。

path.txt

[config]

Config\HtmlFormatConfig.xml

[task]

Config\task\

config 設置采集內容格式化的配置保存路徑

task 設置任務工作規則保存和加載路徑

 

采集工作窗體

起始網址

采集開始的網址,如果是逐頁的模式,則是第一頁的地址;

如果是列表的模式,則是第一個列表頁面的地址。

列表網址

匹配下一個列表頁面地址的正則表達式。

在逐頁模式下,不用填寫。

 

頁面標題

匹配頁面標題的正則表達式

頁面內容

匹配頁面內容的正則表達式

頁面鏈接

匹配內容頁面鏈接的正則表達式

在逐頁模式,采集到一個內容頁面之后,可以匹配到下一個頁面鏈接。

在列表模式,采集到一個列表頁面之后,就可以匹配到若干個頁面鏈接。

分頁標識

識別是否為分頁標題的匹配正則表達式

首頁標識

第一頁的標識,比如標題【科技業的員工到底有多年輕 1)】,那么標識可以是(1)

保存路徑

采集內容的保存目錄

分頁處理

是指采集的文章資料是進行了分頁的,那么程序會根據設定的規則,判斷是否是分頁章節,如果是,則不重復添加標題。

比如

科技業的員工到底有多年輕 1

科技業的員工到底有多年輕 2

科技業的員工到底有多年輕 3

那么采集過程中,只會寫入一個標題【科技業的員工到底有多年輕】

保存為一個文件

如果勾選,則采集到的所有內容都寫入到一個文件中
 

開始

開始采集并將內容保存

測試

在消息框顯示采集的效果

格式化設置窗體

左邊是匹配到的字符,后邊是表示要替換成的字符。

程序運行時,會將第二行(如果有兩行)的字符拷貝一份轉換為大寫組合在一起,進行格式化。

換行標簽、空白標簽、縮進標簽

可以輸入包含正則在內的字符進行匹配

章節標題

{0}表示采集的序號(采集一個地址則加1),{1}表示采集到的標題。

輔助功能

可以將輸入的字符進行大小寫轉換

 

編寫新規則

編寫采集規則需要有一定的正則表達式的知識,如果不了解閱讀這個頁面:(正則表達式30分鐘入門教程)http://deerchao.net/tutorials/regex/regex.htm

 

任務是以xml文件的形式保存,文件名命名格式是:任務名稱 - 網站名稱.xml

在任何一個任務狀態下,只需要修改任務名稱,或者網站名稱,再點擊保存任務,即可新建一個任務。

如果名稱一樣會提示是否覆蓋。

 

這里以博客園新聞為例

博客園新聞是一個列表式的采集任務——在一個頁面可以匹配得到若干個頁面地址

http://news.cnblogs.com/

使用firebug或者其它前端調試工具,可以輕松得到采集特征

比如下圖

 


 

點擊紅框【點擊查看頁面中的元素】然后在頁面的【創業公司如何評估度量公司潛力的方法】位置點下。

就可以定位到html代碼

這樣就可以獲取到內容頁面的鏈接特征


<h2 class="news_entry">
<target="_blank" href="/n/182026/">創業公司如何估值 — 度量公司潛力的方法</a>
</h2>

然后需要觀察這個標識是不是唯一特征的,也就是這個特征匹配到的都是自己期望中的內容。否則就需要增加更多的限制特征。

 

將特征編寫為匹配的正則表達式

 

源碼說明

解決方案有3個項目組成

Forms是視窗程序

Framework是采集程序

Helper是輔助程序

 

由于考慮到以后會增加不同的采集任務,因此采用MDI窗體。

Config目錄是默認配置

FrmFormatConfig是內容格式化配置窗體

FrmGatherWorker是采集工作窗體

MDIParentMain是窗體容器

Config是內容格式化配置實體類

Task是采集任務規則實體類

Worker是采集工作類

 

 

Worker采集工作類說明

先看看3個主要事件

復制代碼
/// <summary>
/// 錯誤觸發事件,傳入參數 引發的異常對象、錯誤的類型、當前工作的網址
/// </summary>
public event Action<Exception, ErrorType, string> OnError;

/// <summary>
/// 工作結束觸發事件
/// </summary>
public event Action OnWorkEnd;

/// <summary>
/// 一次/地址采集完成觸發事件,傳入參數 采集內容的標題、內容、網址
/// </summary>
public event Action<stringstringstring> OnWorkItemEnd;
復制代碼

 

創建對象

 
Worker work = new Worker(_httpRequest, _config, _task);
work.OnError += w_OnError;
work.OnWorkItemEnd += work_OnWorkItemEnd;
work.OnWorkEnd += work_OnWorkEnd;

 

定義內容處理

復制代碼
/// <summary>
/// 一次(個網址)采集完成后,執行內容寫入文件操作
/// </summary>
private void work_OnWorkItemEnd(string curWebTitle, string curWebContent, string curUrl)
{
    //將采集到的內容寫入到文件流中
    byte[] byteWebContent = Encoding.UTF8.GetBytes(curWebContent);
    if (_task.IsSaveOnlyFile)
    {
        //如果當前內容標題為空,則可能分頁
        if (!string.IsNullOrEmpty(curWebTitle))
        {
            byte[] byteWebTitle = Encoding.UTF8.GetBytes(curWebTitle);
            _curSavaFile.Write(byteWebTitle, 0, byteWebTitle.Length);
        }
        _curSavaFile.Write(byteWebContent, 0, byteWebContent.Length);
    }
    else
    {
        using (FileStream curSavaFile2 = new FileStream("{0}{1}.txt".FormatWith(_task.SavePath, curWebTitle), FileMode.OpenOrCreate, FileAccess.ReadWrite))
        {
            curSavaFile2.Write(byteWebContent, 0, byteWebContent.Length);
        }
    }
    UpdateWorkMessage("\n已采集:{0},網址:{1}".FormatWith(curWebTitle, curUrl));
    Application.DoEvents();
}
復制代碼

 

 

其它更多,請下載源碼查看

其它

運行程序下載:http://files.cnblogs.com/yelaiju/NWebGather.rar

 

源碼下載:http://files.cnblogs.com/yelaiju/NWebGather-src.rar

 

開源地址:https://github.com/alifellod/NWebGather

不了解github下載源碼的方式,請看文章:http://www.cnblogs.com/yelaiju/p/3180986.html

 

正則詞典(手冊)http://www.cnblogs.com/yelaiju/p/3182854.html

 

相關推薦項目:

 

 

園友:心態要好推薦 http://blog.csdn.net/sq_zhuyi/article/details/7924776
 

 

各位朋友對采集有興趣,可以一起維護和貢獻代碼,如此大家都可以輕松的共享同一個采集框架。

 

QQ群:9524888

歡迎大家入群交流共享采集任務規則,討論技術,討論人生……

作者: 火地晉
出處: http://yelaiju.cnblogs.com
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

編程之路——火地晉 2013-08-31 23:08:53

[新一篇] 《三國志12》頭像編輯器

[舊一篇] 正則表達式30分鐘入門教程
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表