網絡爬蟲之html2md

前言

上週利用java爬取的網絡文章,一直未能利用java實現html轉化md,整整一週時間才得以解決。html

雖然本人的博客文章數量很少,可是毫不齒於手動轉換,畢竟手動轉換浪費時間,把那些時間用來作些別的也是好的。java

設計思路

Java實現

一開始的思路是想着用java來解析html,想着各類標籤解析、符號解析、正則替換等等,決定在github上搜索一波,果真是有前輩實現過,頓時欣喜若狂;node

代碼地址jquery

下載後以下圖
圖片描述
可利用htmlToHexoMd方法測試運行linux

可能做者是在linux服務器上定義的路徑,我測試的時候一直提示路徑問題,結果被迫更改轉化的路徑代碼,git

調試運行後生成的md文件,本地啓動hexo服務,上傳剛剛生成md文件,網頁瀏覽,不滿,棄之。github

NodeJS實現

爲什麼忽然會選擇NodeJS來實現,恰好最近在看node書籍,裏面有提到node爬蟲,解析爬取的內容,書中提到利用cheerio模塊,遂果斷瀏覽其api文檔,cheerio其實就是jquery的翻版,這下可方便了,心中大喜。api

實現思路

實現單個轉化bash

自定義解析服務器

實現批量轉化

難點分析

自定義解析是比較頭疼的事情,必需要分析須要轉化的html的格式,須要讀取的內容,本人對h1,h2,h3,div,img,a標籤作了處理,可自行擴展

html解析代碼以下

if('p' === name){
                if(e_children.type === 'text'){
                    if(e.children.length > 1){
                        for(var j=0,c_len=e.children.length;j<c_len;j++){
                            if(e.children[j]['name'] === 'a') writeData = writeData + '('+e.children[j].attribs.href + ')\r\n';
                            else if(e.children[j]['type'] === 'text') writeData = writeData + e.children[j].data + '\r\n';
                        }
                    }else writeData = writeData + e.children[0].data + '\r\n';
                }else if(e_children.name === 'img') writeData = writeData + '![Image]('+e.children[0].attribs.src + ')\r\n';
            }else if('div' === name){
                var codes = $('#cnblogs_post_body .cnblogs_code pre').eq(code_idx++).text();
                codes = codes.replace(/^(\s*)\d+/gm, ' ');
                writeData = writeData + '```bash\r\n' + codes + '\r\n```\r\n';
            }else if('h1' === name) writeData = writeData + '# ' + e_children.data + '\r\n';
            else if('h2' === name) writeData = writeData + '## ' + e_children.data + '\r\n';
            else if('h3' === name) writeData = writeData + '### ' + e_children.data + '\r\n';

結語

完整代碼請移步至本人的html2md,若是此文章對您有用請不吝star

相關文章
相關標籤/搜索