上週利用java爬取的網絡文章,一直未能利用java實現html轉化md,整整一週時間才得以解決。html
雖然本人的博客文章數量很少,可是毫不齒於手動轉換,畢竟手動轉換浪費時間,把那些時間用來作些別的也是好的。java
一開始的思路是想着用java來解析html,想着各類標籤解析、符號解析、正則替換等等,決定在github上搜索一波,果真是有前輩實現過,頓時欣喜若狂;node
代碼地址jquery
下載後以下圖
可利用htmlToHexoMd方法測試運行linux
可能做者是在linux服務器上定義的路徑,我測試的時候一直提示路徑問題,結果被迫更改轉化的路徑代碼,git
調試運行後生成的md文件,本地啓動hexo服務,上傳剛剛生成md文件,網頁瀏覽,不滿,棄之。github
爲什麼忽然會選擇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