人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

様々なサイトでPHPでスクレイピングをしたいと考えています。
例えば
http://www.find-job.net/startup/10-js-css-compressors

http://www.ibm.com/developerworks/jp/web/library/wa-objectorientedjs/index.html?ca=drs-
のサイトなどです。

その中でも、そのページのコンテンツのメインとなる記事の文章部分を取得してきたいのですが、どうすればよいのでしょうか。

※記事の文章文=フッターやサイドにある別のページへのリンクではなく、
そのWebページを読むときにメインで読むところの文章です

●質問者: whiterdev
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● うぃんど
ベストアンサー

(1)はじめに

ウェブスクレイピングするならば…、
そのサイトの構成やページの構成を調べるところから始めます。

(2)ツール

昔はソースコードを目で追いかけたものですが、
最近はブラウザに便利な機能が備わっていて、
おおよその目安を付けやすくなっています。

たとえば、IEには「F12 開発者ツール」があります。
ツールメニューからも呼び出せますし、F12キーを押しても呼び出せます。
「開発者ツール」の検索機能(Ctrlキー+Bキー)をスタートさせて、
構造を知りたい箇所をクリックすれば、
ソースコードの該当する箇所が反転表示されます。
http://msdn.microsoft.com/ja-jp/library/ie/gg589512%28v=vs.85%29.aspx

Firefoxには「インスペクタ」があります。
調べたい箇所を右クリックして「要素を調査」とするだけで、
ソースコードが表示され、該当する箇所が反転表示されます。
https://developer.mozilla.org/ja/docs/Tools/Page_Inspector

どのようなツールを使うのが便利なのかはその人によりますので、
現在使っている環境に合わせたものからやってみると良いでしょう。
(私はFirefoxアドオンのFirebugを今も主に使っています。)

(3)構造解析

実際にツールで探した箇所を抜き出してみたのが下記です。
※本文は長くなるので省略しています。

<div class="ctL">
 <div id="post-3102" class="post-3102 post type-post status-publish format-standard hentry category-1"> 
 <div class="title">
 タイトル
 </div>
 <div class="articleCt">
 本文(ソーシャルリンクも含まれる)
 </div>
 </div>
</div>
<div id="ibm-content-main">
 <div class="ibm-container">
 本文(ソーシャルリンクも含まれる)
 </div>
</div>

(4)phpプログラミング

私は回線の細かった時代(Kbps)の名残で、読み取りながらパーツを分離し、
正規表現で細かく抜き出すことが多いのですが、
パソコンも高速になり、回線もMbpsが当然の現代では、
構文解析のクラスを使う方が賢いでしょう。

phpにはいくつかのクラスがありますが有名どころは次の2つです。
・HTML、XML問わずに使えるDOMDocumentクラス
http://php.net/manual/ja/class.domdocument.php
・XMLに特化したSimpleXML
http://www.php.net/manual/ja/book.simplexml.php

さて、
「1人20回まで」となっていますが、
私の仕事ではないので、そこまでのお付き合いはできません。
あとは自助努力してください。


うぃんどさんのコメント
>要素の調査まではできています。 それならそうと書いておいてください。 互いに長々と無駄な時間を過ごしてしまいました。 (whitedevさんのこれまでの質問を見直し、 そして、どのように答えたら良いかを考え、サンプルを用意し、 回答を書き上げるまで20分ほど要しました…。 「あんたに頼んだわけじゃない」と言われればそれまでですが…。) >汎用性を持ったスクレイピングはできないのでしょうか 共通形式での配信を行うATOMやRSSとは違って、 共通性はありませんので、 「はじめに」書いたように調べることから始めます。

whiterdevさんのコメント
申し訳ありませんでした。 自分がどこまで把握しているかを、載せておくべきでした。 ただ、回答をいただいたことで自分の中でぼんやりとこうやればいいんじゃないかというところが、裏付けできたためすごく参考になりました。 ありがとうございます。

質問者から

要素の調査まではできています。
しかしながら、各サイトで本文が書かれているところ(たとえばdiv class)が変わってしまうので、汎用性がありません。
汎用性を持ったスクレイピングはできないのでしょうか。
なお、構文解析にはsimple_html_dom.phpというパーサーを使用してはいます。


2 ● tak

http://www.mibel.cs.tsukuba.ac.jp/~ceekz/ExtractUniqueBlock/

教師情報を必要としないニュースページ群からのコンテンツ自動抽出

教師情報を必要としないWebページ群のコンテンツ自動抽出ツールの提案

こちらをじっくり読んでください。


whiterdevさんのコメント
研究になったりもしているのですね。 参考にしたいと思います
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ