HTMLをスクレイプしてCSVに変換
締め切りが 2017/03/15 10:00 AM なので,その 1 分後に投稿されるように予約
設問
Webページに含まれるテーブルの中身をスクレイプして、Excelなどで集計がしやすいようCSVファイルに変換する。
定期的に行う必要があるため、手作業で行うのではなく自動化したい。
求められるプログラムの仕様は、以下の通り。
標準入力から、HTML準拠(Wikipedia参照)のテキストデータが送られる
入力されるHTMLはフォーマットが正しい、具体的にはW3Cの構文検証サイトでエラーがないことを前提とする
また、HTMLはUTF-8でエンコーディングされ、多バイト文字は含まれないものとする
HTMLには、tableタグが1つだけ含まれる(テーブルは単体である)
テーブル内のセルはtr, th, tdタグで構成され、セルが連結されることはない
HTML内のテーブルを表形式として抽出し、CSVフォーマット(Wikipedia参照)で標準出力に返すこと
出力するCSVはコンマ「,」(U+002C) 区切りで、すべてのフィールドをダブルクォート「"」(U+0022)で囲むこと
CSVのフィールドとして出力される文字列は、thまたはtdタグ内のテキストに限定すること
thおよびtdタグの扱いは、CSV出力時において変える必要はない
thおよびtdタグ内に、さらにタグが含まれる場合、タグ自体は除去し配下のテキストだけを抽出すること
文字列フィールドは文字実体参照(Wikipedia参照)を用いてアンエスケープ処理をすること
ただし、(大なり記号)、&(アンパサンド)のみの対応でよいものとする
【問題】
標準入力から、HTMLフォーマットのテキストが送られます。
このHTMLからtableタグで囲まれた領域をスクレイプし、CSVに変換した上で、その結果を標準出力に返してください。
なお、アンエスケープ処理も忘れずに。
=================================================
f = function(s) {
ncol = sum(grepl("", s))
s = gsub("", "", s)
s = gsub("title", "", s)
s = gsub("&", "&", s)
s = gsub("<", " s = gsub(">", ">", s)
s = (s[s != ""])[-1] # テストシステムでは先頭に 1 個の NULL が付いてしまっている
apply(matrix(s, byrow=TRUE, ncol=ncol), 1, function(x) cat('"', paste(x, collapse='","'), '"\n', sep=""))
}
cat(f(readLines(file("stdin", "r"))))
最新の画像[もっと見る]
- 算額(その2135) 10時間前
- 算額(その2134) 16時間前
- 算額(その2133) 1日前
- 算額(その2132) 3日前
- 算額(その2131) 4日前
- 算額(その2130) 4日前
- 算額(その2129) 5日前
- 算額(その2128) 5日前
- 算額(その2127) 6日前
- 算額(その2126) 6日前
※コメント投稿者のブログIDはブログ作成者のみに通知されます