2007/02/20 WebサービスのAPIやRSSフィードを使って複数サイトのサービスや情報をマッシュアップ――。これはWeb2.0が包含するいくつかの概念のうち、最も重要なものの1つだ。Amazon.comやGoogle、Yahoo!、楽天といった大手Webサイトは、RESTやSOAPを用いたAPIを公開しており、さまざまなサービス提供者や個人がAPIを通して各種サービスを利用している。その一方、世の中のWebサイトの大多数はWeb1.0的なHTMLやCGIフォームしか提供していないのが現実だ。こうした背景からWeb1.0サイトから構造化されたデータを引っ張り出す“Webスクレイピング”技術が急速に発展してきているようだ。 HTMLをXML化し、XPathで関連データだけを抽出 例えば価格情報サイトでは製品名から価格が簡単に調べられるが、Webサーバから提供されるのは、製品名や価格にレ
スクレイピングをやったことがあるひとならばわかると思うけど、スクレイピングはとてもつまらない作業だ。 HTMLの中から抜き出したい部分を見つけて、その周辺にある特徴的な部分に着目して正規表現を書いたりして抜き出す。あるいはHTMLからDOMを生成して特定のクラスがついているエレメントを抜き出したりする。HTMLをXHTMLに整形、変換してXPathで抜き出す方法もある。どの方法もやることは単純で簡単なことだけれど、極めてめんどくさい。 そういうものだと思って数年間過ごしてきたけれど、去年の夏に出てきた Dapper: The Data Mapper は、そんな退屈な常識をモダーンなajaxでもって吹き飛ばした。もしDapperがどんなのなのか知らなかったら、ちょっと長くてはじめ退屈なんだけど デモムービー を見てみてください。 Dapperが教えてくれたことは、スクレイピングなんて、欲し
今回は、為替レートをスクレイピングにより取得してみましょう。といっても、実際は為替レートが表示されているHTMLファイルをスクレイピングし、該当箇所を抜き出すだけなので、基本は殆ど同じです。 今回利用するサイトはひまわり証券株式会社 ブログパーツ FXレートウォッチャーです。元がブログパーツなので、取得するHTMLファイルの容量も少なくてよさそうなので、今回は、このサイトを利用してみます。 上記のサイトでは、<IFRAME>タグを利用して、パーツを表示するタイプです。なので、<IFRAME>タグのsrcのアトリビュートで指定されている、 を対象にしてみます。 サンプルソースを見ながら解説を進めます。 rate.php proxy.php ではプログラムを見てみましょう。 前回のはてなフォトライフではスクレイピング対象となるHTMLファイルを動的に変化させましたが、今回は固定ですね。3行目の
Twitter Facebook B! Bookmark LINE Pocket Feedly HTMLをスクレイピング(scraping)してあれこれとするとき、僕はずっと正規表現に頼っていたのですが、 ページの構造が変化するとすぐに使えなくなってしまうし、時間がかかる割りに退屈な作業なので何とかならないかなと思っていました。 PHPで探していたのですが、XML(とかRSS)をパースする関数やライブラリは、良く目にするものの、HTMLを処理できるものはなかなか見つかりませんでした。 以下は、PHP(とかRuby、Perl)でHTMLをスクレイピングしたりパースするための方法。 PHPでスクレイピング&パース HTMLを整形式のXML文書に修正するPHPクラス HTMLを、整形式のXMLに変換してくれるライブラリ。PEARのXML_HTMLSax3が同梱されているので、これだけでちゃんと動
ダウンロード等 extbody-0.1.1.tar.gz(右クリックで保存) ライセンスは、Apacheライセンスv2.0なので自己責任でご利用ください。 (上記ファイルはMercurialリポジトリのcloneにもなっています。) 動作に必要な環境 Python2.5 feedparser chardet また、内部でppkfを使用しております。(extbodyに内蔵しております。) インストール feedparserと、chardetをインストールしておきます。 以上が準備できれば、extbodyも以下のコマンドでインストールできます。 % python setup.py install 使用法 ayu@~% python Python 2.5.1 (r251:54863, Jun 17 2007, 08:50:55) [GCC 4.0.1 (Apple Computer,
Pythonで、BlogやニュースのWEBページから、本文領域のHTMLを抽出するツール extbody -- Blog&News本文領域抽出ツール を作りましたので公開します。 いつものごとくα版です。(そろそろいいかげんに、ひとつひとつきっちりと作ったほうがいいよね。) 以前から、他のアプリの一部として使っていたものを分離してモジュールにまとめたものです。 * 正解率8割程度。(2ch抜粋系blogにはめっぽう弱いです。) * 日英対応。 です。 中身は試行錯誤が複雑にからまった呪文のようなソースになっておりますことをご了承ください。 最初はPython標準のHTMLパーサーや、有名なBeautifulSoupを使ってましたが、時折解析できないHTMLがありましたので、結局自筆の正規表現で解析しています。 おおざっぱにtableタグとdivタグぐらいの対応が少なくとも合っているソースで
zuzara.com を読んでいると、ブログの本文抽出にチャレンジしているのを見つけました。 tdかdivで囲まれた文字列で、文章と比べてHTMLのタグがあまり多くないもののうち、一番文字数が多いのが本文だろう、というアルゴリズム。 PHP で書かれたコードを Perl に移植しながら、もっと効率的なアルゴリズムが無いかを考えていました。 まずは、『タグの数』ではなく、比率をで判定するように改良(?)しました。 スコア = タグ除去後(length) / タグ除去前(length) タグが含まれていないときが最大値になるので、スコアは 1 が最大となります。タグの数よりもこっちの方が良さそうだったのだけど、コメント部分を抽出してしまう可能性が非常に高い。だめぽ。 牛乳を飲みつつ考えていると(カルシウムを摂取して身長を伸ばす)、ひらめきましたよ!要は、長い文章を取り出せればいいのだから、句読
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く