nodejsでjQueryでスクレイピングしながら本文抽出にかける
バイトで本文抽出器を作成する必要あったのでいろいろ試していた
やる
hackers newsのエントリ一覧にかけてみる。
coffee-script
request = require('request') jsdom = require('jsdom').jsdom jquery = require('jquery') extractor = require('extractcontent') fetch = (uri,fn)-> request uri:uri, (error, response, body)-> fn error,jquery.create jsdom(body).createWindow() extract = (url,fn)-> extractor.extractFromUrl url, (error, result)-> fn error , result fetch "http://news.ycombinator.com/",(err,$)-> $("td.title a").each -> url=$(@).attr "href" if url.indexOf("http")>-1 console.log "=== #{url} ===" extract url,(err,result)-> console.log result.content
正直言うとchildprocess.exec など使えばnodeで完結する必要はない。他に完成度が高いモジュールがあるならシェルから引っ張ってこればいい。
今は console.logしてるだけだけど、DBに叩きこんでクローラ作るなりすればいいと思う
node-readabilityを使う
readabilityとは狭い画面向けに読みやすいHTMLを構成してくれるサービスであり、またそのnodejs実装。
GitHub - arrix/node-readability: Server side readability with node.js
npm install readability
# --- 続き --- readability = require('readability') fetch "http://news.ycombinator.com/",(err,$)-> $("td.title a").each -> url=$(@).attr "href" if url.indexOf("http")>-1 request uri:url, (error, response, body)-> readability.parse body, url, (result)-> console.log(result.content);
iframeで外部サイト読むのをやめたかったので、readability通して扱うことにする